multipart/form-data boundary

AmunRa

Gesperrter Benutzer
Hallo

ich schreib gerade ein Programm das ein webformular parst und dem User dan eine GUI anbietet in dem er die Daten eingeben muss. mein Problem liegt jetzt daran das ganze dann auch wieder zu senden.

genau gesagt geht es um den sog. Baundary wert den man hier mitgeben muss.

Ich habe bis jetzt nirgends gefunden wie sich dieser berechnet.
auf dieser Seite hab ich nun folgendes gelesen.

As with other multipart types, a boundary is selected that does not
occur in any of the data. Each field of the form is sent, in the
order defined by the sending appliction and form, as a part of the
multipart stream. Each part identifies the INPUT name within the
original form. Each part should be labelled with an appropriate
content-type if the media type is known (e.g., inferred from the file
extension or operating system typing information) or as
"application/octet-stream".

Da hier auch nicht wriklich etwas steht wie sich diese Boundary berechnet hab ich ja nun den verdacht, dass ich diesen Wert einfach frei wählen darf, oder sehe ich das falsch?

Weis jemand wie man den korrekten wert errechnet/auswählt?

Vielen Dank
 

Sued_Faust

Bekanntes Mitglied
Das ist im grunde nur eine ID.
Ich habe es immer so gemacht, dass ich mir randomisierte Zahlen hab errechnen lassen.

Java:
	protected static String randomString() {
		random = new Random();
		return Long.toString(random.nextLong(), 36);
	}

Gruß
 
M

maki

Gast
Der RFC 1867 ist da minimal ausführlciher:
3.3 use of multipart/form-data

The definition of multipart/form-data is included in section 7. A
boundary is selected that does not occur in any of the data. (This
selection is sometimes done probabilisticly.)
Each field of the form
is sent, in the order in which it occurs in the form, as a part of
the multipart stream. Each part identifies the INPUT name within the
original HTML form. Each part should be labelled with an appropriate
content-type if the media type is known (e.g., inferred from the file
extension or operating system typing information) or as
application/octet-stream.





Nebel & Masinter Experimental [Page 3]

RFC 1867 Form-based File Upload in HTML November 1995


If multiple files are selected, they should be transferred together
using the multipart/mixed format.

While the HTTP protocol can transport arbitrary BINARY data, the
default for mail transport (e.g., if the ACTION is a "mailto:" URL)
is the 7BIT encoding. The value supplied for a part may need to be
encoded and the "content-transfer-encoding" header supplied if the
value does not conform to the default encoding. [See section 5 of
RFC 1521 for more details.]

The original local file name may be supplied as well, either as a
'filename' parameter either of the 'content-disposition: form-data'
header or in the case of multiple files in a 'content-disposition:
file' header of the subpart. The client application should make best
effort to supply the file name; if the file name of the client's
operating system is not in US-ASCII, the file name might be
approximated or encoded using the method of RFC 1522. This is a
convenience for those cases where, for example, the uploaded files
might contain references to each other, e.g., a TeX file and its .sty
auxiliary style description.

On the server end, the ACTION might point to a HTTP URL that
implements the forms action via CGI. In such a case, the CGI program
would note that the content-type is multipart/form-data, parse the
various fields (checking for validity, writing the file data to local
files for subsequent processing, etc.).
Wichtig scheint nur zu sien, dass die Boundary nicht bereits in den Daten vorkommt.
 

Der Müde Joe

Top Contributor
>Weis jemand wie man den korrekten wert errechnet/auswählt?

Wie du gesagt hast, frei wählbar.
Hab mir mal für EMail multiparts sowas gebastelt

Java:
/**
 * Helper to create unique id.
 */
private static final class UniqueCreator {

	static int counter = 1;

	public static final int getUniqueId() {
		if(counter > 0) {
			return ++counter;
		}
		counter = 1;
		return getUniqueId();
	}
}
private static final String createUniqueId() {
	StringBuilder result = new StringBuilder();
	result.append("---Part=").append(UniqueCreator.getUniqueId());
	result.append('_').append(result.hashCode());
	result.append('_').append(System.currentTimeMillis());
	return result.toString();
}
 

AmunRa

Gesperrter Benutzer
Danke für eure Antworten

ich habs jetzt auch so gelöst mit der aktuellen Uhrzeit

Java:
boundary= Long.toString(System.currentTimeMillis(),16)
 
Ähnliche Java Themen

Ähnliche Java Themen


Oben