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
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!