Heim  >  Artikel  >  Java  >  Wie lade ich Dateien und zusätzliche Parameter mit java.net.URLConnection auf einen HTTP-Server hoch?

Wie lade ich Dateien und zusätzliche Parameter mit java.net.URLConnection auf einen HTTP-Server hoch?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-25 03:02:30181Durchsuche

How to upload files and additional parameters to an HTTP server using java.net.URLConnection?

Hochladen von Dateien auf einen HTTP-Server mit zusätzlichen Parametern in Java

Das Hochladen von Dateien auf einen HTTP-Server ist für viele Anwendungen eine häufige Notwendigkeit. Manchmal ist es jedoch auch notwendig, zusätzliche Parameter zusammen mit den Dateien zu übergeben. Hier ist eine Lösung, mit der Sie sowohl Dateien als auch Parameter senden können, ohne externe Bibliotheken zu verwenden:

java.net.URLConnection und Multipart/Form-Data

Zum Senden von Dateien und Parameter verwenden Sie java.net.URLConnection und verwenden eine Multipart-/Formulardatenkodierung. Mit Multipart/form-data können Sie Binärdaten (Dateien) und Zeichendaten (Parameter) in einer einzigen HTTP-Anfrage mischen.

Beispielcode:

<code class="java">String url = "http://example.com/upload";
String charset = "UTF-8";
String param = "value";
File textFile = new File("/path/to/file.txt");
File binaryFile = new File("/path/to/file.bin");
String boundary = Long.toHexString(System.currentTimeMillis());
String CRLF = "\r\n";

URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

try (
    OutputStream output = connection.getOutputStream();
    PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, charset), true);
) {
    // Send normal param.
    writer.append("--" + boundary).append(CRLF);
    writer.append("Content-Disposition: form-data; name=\"param\"").append(CRLF);
    writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF);
    writer.append(CRLF).append(param).append(CRLF).flush();

    // Send text file.
    writer.append("--" + boundary).append(CRLF);
    writer.append("Content-Disposition: form-data; name=\"textFile\"; filename=\"" + textFile.getName() + "\"").append(CRLF);
    writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF);
    writer.append(CRLF).flush();
    Files.copy(textFile.toPath(), output);
    output.flush(); 
    writer.append(CRLF).flush();

    // Send binary file.
    writer.append("--" + boundary).append(CRLF);
    writer.append("Content-Disposition: form-data; name=\"binaryFile\"; filename=\"" + binaryFile.getName() + "\"").append(CRLF);
    writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(binaryFile.getName())).append(CRLF);
    writer.append("Content-Transfer-Encoding: binary").append(CRLF);
    writer.append(CRLF).flush();
    Files.copy(binaryFile.toPath(), output);
    output.flush(); 
    writer.append(CRLF).flush();

    // End of multipart/form-data.
    writer.append("--" + boundary + "--").append(CRLF).flush();
}

// Request is lazily fired whenever you need to obtain information about response.
int responseCode = ((HttpURLConnection) connection).getResponseCode();
System.out.println(responseCode); </code>

Zusätzliche Hinweise:

  • Stellen Sie sicher, dass Sie für jede mehrteilige Anfrage einen eindeutigen Grenzwert angeben.
  • Dateien müssen in dem Zeichensatz vorliegen, der beim Senden des Content-Type-Headers angegeben wurde .
  • Apache Commons HttpComponents Client kann den Prozess weiter optimieren, ist aber nicht notwendig.

Referenz:

  • [Using java.net.URLConnection zum Auslösen und Verarbeiten von HTTP-Anfragen](https://docs.oracle.com/javase/tutorial/networking/urls/creating-urls.html)

Das obige ist der detaillierte Inhalt vonWie lade ich Dateien und zusätzliche Parameter mit java.net.URLConnection auf einen HTTP-Server hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn