Sven Rautenberg: HTTP-Server Auswertung von multipart/form-data

Beitrag lesen

Moin!

Das Auseinandernehmen des Multiparts habe ich so gelöst:

  1. Aufteilen der Parts am boundary
    Für alle Parts:
  2. Übernehmen des Inhalts ab CRLFCRLF bis CRLF-- als Feldinhalt

Es gibt kein CRLF--, wenn du den Part am Boundary aufgeteilt hast. Es gibt allenfalls noch ein letztes CRLF.

Spezielle Behandlung des Parts als Dateiinhalt:
3.1 Suchen des Strings "Content-Type:" und übernehmen des nachstehenden Inhalts als DateiInhaltsTyp.
3.2 Übernehmen des Inhalts ab CRLFCRLF bis CRLF-- als Dateiinhalt.

Das ist auch nicht korrekt. Je nach Mimetyp wird der Dateiinhalt codiert. text/plain natürlich nicht. Die Codierung steht im Part-Header. Und der Dateiinhalt geht natürlich wieder bis zur Part-Boundary.

Das Problem ist die Begrenzung der Inhalte durch CRLF--. Diese Zeichenkombination kann, relativ häufig sogar, in Textdateien und auch in TextAreas vorkommen, wodurch meine Methode der "Inhaltsfindung" natürlich ausgehebelt würde.

Die Boundary _insgesamt_ ist so zu wählen, dass dieser String nicht im Inhalt vorkommt. Das ist Aufgabe des Browsers. Außerdem steht die gewählte Boundary ja im Header der Multipart-Nachricht. Damit kannst du die einzelnen Teile ja aufsplitten.

Eine Idee ist, nach dem Aufteilen der Parts, jedem Part am Ende, also nach den "--", noch irgendwelche Zeichen anzufügen, so dass man dann eine Endposition CRLF--xxx hätte, die nicht so häufig als Dateiinhalt vorkommt. Welche Zeichen wären da günstig? Ich würde jetzt einfach die boundary wieder anfügen.

Die Startmarke eines Parts ist "--$BOUNDARYSTRING", das Ende einer Reihe von Parts wird mit "--$BOUNDARYSTRING--" gekennzeichnet. Wozu brauchst du da jetzt noch irgendeine Markierung?

  • Sven Rautenberg