Hallo,
mein JAVA-HTTP-Server[1] kann schon relativ viel. GET mit Query-Parameterübernahme aus URI-Query, POST enctype="application/x-www-form-urlencoded" mit Query-Parameterübernahme aus URI-Query und POST-Query und POST enctype="multipart/form-data" mit Query-Parameterübernahme aus URI-Query und Multipart-POST-Query. Hier habe ich ein Problem.
Folgender Multipart-Teil kommt beispielsweise nach Absenden eines Formulars an:
-----------------------------7d53c93420126
Content-Disposition: form-data; name="name01"
Axel Richter
-----------------------------7d53c93420126
Content-Disposition: form-data; name="ta01"
Der Inhalt
des Textfeldes
-----------------------------7d53c93420126
Content-Disposition: form-data; name="sex"
male
-----------------------------7d53c93420126
Content-Disposition: form-data; name="attachment"; filename="C:\Test.txt"
Content-Type: text/plain
Das ist nur ein Test
über zwei Zeilen.
-----------------------------7d53c93420126
Content-Disposition: form-data; name="Submit01"
Absenden
-----------------------------7d53c93420126--
siehe http://www.faqs.org/rfcs/rfc1867.html
Zeilenschaltungen sind immer CRLF.
Boundary ist im Beispiel: ---------------------------7d53c93420126
Das Auseinandernehmen des Multiparts habe ich so gelöst:
1. Aufteilen der Parts am boundary
Für alle Parts:
2. Suchen des Strings "name=" und übernehmen des nachstehenden Strings als Feldname
3. Suchen des Strings "filename=" und übernehmen des nachstehenden Inhalts als Dateiname -> Spezielle Behandlung des Parts als Dateiinhalt
4. Übernehmen des Inhalts ab CRLFCRLF bis CRLF-- als Feldinhalt
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 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.
Wie kann man das Problem lösen?
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.
Oder gibt es da bereits eine genormte Vorgehensweise?
viele Grüße
Axel
[1] Der Server soll zur Veranschaulichung des HTTP-Protokolls dienen.