„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > So laden Sie Dateien mit zusätzlichen Parametern mit java.net.urlconnection und Multipart/Form-Data-Codierung hoch?

So laden Sie Dateien mit zusätzlichen Parametern mit java.net.urlconnection und Multipart/Form-Data-Codierung hoch?

Gepostet am 2025-04-09
Durchsuche:235

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 senden. Hier ist eine Aufschlüsselung des Prozesses:

multiPart/form-data codieren

MultiPart/Form-Data sind für Postanfragen ausgelegt, die beide binären (z. B. Dateien) und Charakterdaten (z. B., z. B. Parameter) kombinieren. Die Enkodierung beinhaltet die Aufteilung des Antragskörpers in mehrere Teile, die jeweils mit einem Grenzstring vorangestellt sind. importieren java.io.outputstream; Import Java.io.printwriter; importieren java.net.urlConnection; import Java.nio.charset.StandardCharets; importieren java.nio.file.files; Import Java.nio.file.Paths; öffentliche KlassendateiEUpload { public static void main (String [] args) löst Ausnahme {aus { String url = "http://example.com/upload"; String param = "value"; Datei textfile = new Datei ("/path/to/file.txt"); Datei binaryFile = new Datei ("/path/to/file.bin"); String boundary = long.tohexString (System.currentTimemillis ()); UrlConnection Connection = neue URL (URL) .OpenConnection (); connection.setDooutput (true); connection.setRequestProperty ("Content-Typ", "Multipart/Form-Data; bloße =" Grenze); try (outputStream output = connection.getOutputStream (); Printwriter writer = neuer Pressewriter (neuer Ausgangsstreamwriter (Ausgabe, Standardcharets.utf_8), True)) { // Parameter senden writer.Append ("-" Grenze) .Append ("\ r \ n"); writer.Append ("Inhaltsdisposition: Formdaten; name = \" Param \ ""). append ("\ r \ n"); writer.append ("content-type: text/plain; charset =" StandardCharets.utf_8) .Append ("\ r \ n"); writer.Append ("\ r \ n"). append (param) .Append ("\ r \ n"). Flush (); // Textdatei senden writer.Append ("-" Grenze) .Append ("\ r \ n"); writer.Append ("Inhaltsdisposition: Formdaten; name = \" textfile \ "; fileName = \" "textFile.getName ()" \ ""). append ("\ r \ n"); writer.append ("content-type: text/plain; charset =" StandardCharets.utf_8) .Append ("\ r \ n"); writer.Append ("\ r \ n"). Flush (); Dateien.Copy (textfile.topath (), output); output.flush (); writer.Append ("\ r \ n"). Flush (); // Binärdatei senden writer.Append ("-" Grenze) .Append ("\ r \ n"); writer.Append ("Inhaltsdisposition: Formdaten; name = \" BinaryFile \ "; FileName = \" "BinaryFile.getName ()" \ ""). append ("\ r \ n"); writer.Append ("Content-Typ:" urlConnection.GuessContentTypeFromName (BinaryFile.getName ())). Append ("\ r \ n"); writer.Append ("Content-transfer-kodiert: binär"). append ("\ r \ n"); writer.Append ("\ r \ n"). Flush (); Dateien.Copy (BinaryFile.topath (), Ausgabe); output.flush (); writer.Append ("\ r \ n"). Flush (); // Ende von mehrteiler/Formdaten writer.Append ("-" bloße "-"). append ("\ r \ n"). Flush (); } int responseCode = ((httpurlConnection) Verbindung) .GetResponScode (); System.out.println ("Antwortcode:" ResponseCode); } }

zusätzliche Notizen

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

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3