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!