Heim  >  Artikel  >  Java  >  Wie lade ich Dateien mit zusätzlichen Parametern mithilfe von java.net.URLConnection und Multipart/Form-Data-Codierung hoch?

Wie lade ich Dateien mit zusätzlichen Parametern mithilfe von java.net.URLConnection und Multipart/Form-Data-Codierung hoch?

Barbara Streisand
Barbara StreisandOriginal
2024-10-25 04:56:02708Durchsuche

How to upload files with additional parameters using java.net.URLConnection and multipart/form-data encoding?

Dateien mit HTTP-Anfragen hochladen

Um Dateien auf einen HTTP-Server hochzuladen und gleichzeitig zusätzliche Parameter zu übermitteln, java.net.URLConnection und multipart/ Form-Daten-Kodierung wird üblicherweise verwendet. Hier ist eine Aufschlüsselung des Prozesses:

Multipart/Form-Data-Codierung

Multipart/Form-Data ist für POST-Anfragen konzipiert, die beide Binärdateien (z. B. Dateien) kombinieren. und Zeichendaten (z. B. Parameter). Bei der Codierung wird der Anforderungstext in mehrere Teile unterteilt, denen jeweils eine Begrenzungszeichenfolge vorangestellt wird.

Beispielcode

<code class="java">import java.io.File;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class FileUpload {

    public static void main(String[] args) throws Exception {
        String url = "http://example.com/upload";
        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());

        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, StandardCharsets.UTF_8), true)) {
            // Send parameter
            writer.append("--" + boundary).append("\r\n");
            writer.append("Content-Disposition: form-data; name=\"param\"").append("\r\n");
            writer.append("Content-Type: text/plain; charset=" + StandardCharsets.UTF_8).append("\r\n");
            writer.append("\r\n").append(param).append("\r\n").flush();

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

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

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

        int responseCode = ((HttpURLConnection) connection).getResponseCode();
        System.out.println("Response Code: " + responseCode);
    }
}</code>

Zusätzliche Hinweise

  • Apache Commons FileUpload ist nur auf der Serverseite für die Verarbeitung hochgeladener Dateien erforderlich.
  • java.net.URLConnection wird zum Auslösen von HTTP-Anfragen ohne externe Abhängigkeiten bevorzugt.
  • Weitere Informationen finden Sie in der Dokumentation zu java.net.URLConnection und multipart/form-data (RFC2388).

Das obige ist der detaillierte Inhalt vonWie lade ich Dateien mit zusätzlichen Parametern mithilfe von java.net.URLConnection und Multipart/Form-Data-Codierung 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