Heim  >  Artikel  >  Java  >  Wie lade ich Dateien und zusätzliche Parameter mit Javas „URLConnection“ hoch?

Wie lade ich Dateien und zusätzliche Parameter mit Javas „URLConnection“ hoch?

Barbara Streisand
Barbara StreisandOriginal
2024-10-25 02:18:02200Durchsuche

How to Upload Files and Additional Parameters with Java's `URLConnection`?

So laden Sie Dateien vom Java-Client auf einen HTTP-Server mit zusätzlichen Parametern hoch

Bei der Verwendung von HTTP-POST-Anfragen zum Hochladen von Dateien von einem Java-Client auf einen Server kommt es häufig vor Sie möchten den Dateien zusätzliche Parameter hinzufügen. Hier ist eine einfache und effiziente Lösung ohne die Notwendigkeit externer Bibliotheken:

Verwenden Sie java.net.URLConnection, um die HTTP-Anfrage einzurichten und sie für mehrteilige Formulardaten einzurichten, ein beliebtes Codierungsformat für die Verarbeitung sowohl binärer als auch Textdaten. Hier ist ein Beispiel, das zusätzliche Parameter param und die Dateien „textFile“ und „binaryFile“ enthält:

<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");

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 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 boundary
    writer.append("--" + boundary + "--").append(CRLF).flush();
}</code>

Nachdem Sie die Anfrage eingerichtet haben, können Sie sie auslösen und den Antwortcode abrufen:

<code class="java">((HttpURLConnection) connection).getResponseCode();</code>

Weitere Informationen Für fortgeschrittene Szenarien oder zur Vereinfachung des Prozesses sollten Sie die Verwendung von Bibliotheken von Drittanbietern wie Apache Commons HttpComponents Client in Betracht ziehen.

Das obige ist der detaillierte Inhalt vonWie lade ich Dateien und zusätzliche Parameter mit Javas „URLConnection“ 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