Heim  >  Artikel  >  Java  >  Wie lade ich Dateien mit zusätzlichen Parametern von einem Java-Client mithilfe der „multipart/form-data“-Kodierung ohne Bibliotheken von Drittanbietern hoch?

Wie lade ich Dateien mit zusätzlichen Parametern von einem Java-Client mithilfe der „multipart/form-data“-Kodierung ohne Bibliotheken von Drittanbietern hoch?

Linda Hamilton
Linda HamiltonOriginal
2024-10-25 05:39:29527Durchsuche

How to Upload Files with Additional Parameters from a Java Client Using `multipart/form-data` Encoding Without Third-Party Libraries?

Dateien mit zusätzlichen Parametern von einem Java-Client auf einen HTTP-Server hochladen

Lassen Sie uns die Suche nach dem Hochladen von Dateien zusammen mit zusätzlichen Parametern von einem Java-Client auf einen HTTP-Server untersuchen ein Szenario und seine Lösung.

Stellen Sie sich vor, Sie möchten eine Datei und einen Parameter namens „Benutzername“ an einen Server übergeben. Wie würden Sie dies mit einer POST-Anfrage mit Multipart-/Formulardatenkodierung erreichen?

Um die Sache übersichtlich zu halten, lassen Sie uns die Bibliotheken von Drittanbietern meiden und auf die integrierten Java-Tools vertrauen.

<code class="java">import java.io.File;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URLConnection;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Scanner;

public class HttpFileUploadWithParameters {

    private static final String BOUNDARY = Long.toHexString(System.currentTimeMillis());
    private static final String CRLF = "\r\n";
    private static final String CHARSET = "UTF-8";

    public static void main(String[] args) throws Exception {
        String url = "http://example.com/upload";

        File file = new File("/path/to/file.txt");
        String parameter = "value";

        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)) {

            // Write parameter
            writer.append("--" + BOUNDARY).append(CRLF);
            writer.append("Content-Disposition: form-data; name=\"parameter\"").append(CRLF);
            writer.append("Content-Type: text/plain; charset=" + CHARSET).append(CRLF);
            writer.append(CRLF).append(parameter).append(CRLF).flush();

            // Write file
            writer.append("--" + BOUNDARY).append(CRLF);
            writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"").append(CRLF);
            writer.append("Content-Type: application/octet-stream").append(CRLF);
            writer.append(CRLF).flush();
            Files.copy(file.toPath(), output);
            output.flush(); // Important before continuing with writer!
            writer.append(CRLF).flush(); // CRLF is important! It indicates end of boundary.

            // 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 = ((java.net.HttpURLConnection) connection).getResponseCode();
        System.out.println(responseCode); // Should be 200
    }
}</code>

Das obige ist der detaillierte Inhalt vonWie lade ich Dateien mit zusätzlichen Parametern von einem Java-Client mithilfe der „multipart/form-data“-Kodierung ohne Bibliotheken von Drittanbietern 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