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