Bei der Verwendung von HTTP-POST-Anfragen zum Hochladen von Dateien von einem Java-Client auf einen Server kommt es häufig vor Sie möchten den Dateien zusätzliche Parameter hinzufügen. Hier ist eine einfache und effiziente Lösung ohne die Notwendigkeit externer Bibliotheken:
Verwenden Sie java.net.URLConnection, um die HTTP-Anfrage einzurichten und sie für mehrteilige Formulardaten einzurichten, ein beliebtes Codierungsformat für die Verarbeitung sowohl binärer als auch Textdaten. Hier ist ein Beispiel, das zusätzliche Parameter param und die Dateien „textFile“ und „binaryFile“ enthält:
<code class="java">String url = "http://example.com/upload"; String charset = "UTF-8"; String param = "value"; File textFile = new File("/path/to/file.txt"); File binaryFile = new File("/path/to/file.bin"); 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); ) { // Send param writer.append("--" + boundary).append(CRLF); writer.append("Content-Disposition: form-data; name=\"param\"").append(CRLF); writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF); writer.append(CRLF).append(param).append(CRLF).flush(); // Send text file writer.append("--" + boundary).append(CRLF); writer.append("Content-Disposition: form-data; name=\"textFile\"; filename=\"" + textFile.getName() + "\"").append(CRLF); writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF); writer.append(CRLF).flush(); Files.copy(textFile.toPath(), output); output.flush(); writer.append(CRLF).flush(); // Send binary file writer.append("--" + boundary).append(CRLF); writer.append("Content-Disposition: form-data; name=\"binaryFile\"; filename=\"" + binaryFile.getName() + "\"").append(CRLF); writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(binaryFile.getName())).append(CRLF); writer.append("Content-Transfer-Encoding: binary").append(CRLF); writer.append(CRLF).flush(); Files.copy(binaryFile.toPath(), output); output.flush(); writer.append(CRLF).flush(); // End boundary writer.append("--" + boundary + "--").append(CRLF).flush(); }</code>
Nachdem Sie die Anfrage eingerichtet haben, können Sie sie auslösen und den Antwortcode abrufen:
<code class="java">((HttpURLConnection) connection).getResponseCode();</code>
Weitere Informationen Für fortgeschrittene Szenarien oder zur Vereinfachung des Prozesses sollten Sie die Verwendung von Bibliotheken von Drittanbietern wie Apache Commons HttpComponents Client in Betracht ziehen.
Das obige ist der detaillierte Inhalt vonWie lade ich Dateien und zusätzliche Parameter mit Javas „URLConnection' hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!