Heim >Java >javaLernprogramm >Wie lade ich Dateien und zusätzliche Parameter mit java.net.URLConnection auf einen HTTP-Server hoch?
Hochladen von Dateien auf einen HTTP-Server mit zusätzlichen Parametern in Java
Das Hochladen von Dateien auf einen HTTP-Server ist für viele Anwendungen eine häufige Notwendigkeit. Manchmal ist es jedoch auch notwendig, zusätzliche Parameter zusammen mit den Dateien zu übergeben. Hier ist eine Lösung, mit der Sie sowohl Dateien als auch Parameter senden können, ohne externe Bibliotheken zu verwenden:
java.net.URLConnection und Multipart/Form-Data
Zum Senden von Dateien und Parameter verwenden Sie java.net.URLConnection und verwenden eine Multipart-/Formulardatenkodierung. Mit Multipart/form-data können Sie Binärdaten (Dateien) und Zeichendaten (Parameter) in einer einzigen HTTP-Anfrage mischen.
Beispielcode:
<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"); String boundary = Long.toHexString(System.currentTimeMillis()); String CRLF = "\r\n"; 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 normal 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 of multipart/form-data. writer.append("--" + boundary + "--").append(CRLF).flush(); } // Request is lazily fired whenever you need to obtain information about response. int responseCode = ((HttpURLConnection) connection).getResponseCode(); System.out.println(responseCode); </code>
Zusätzliche Hinweise:
Referenz:
Das obige ist der detaillierte Inhalt vonWie lade ich Dateien und zusätzliche Parameter mit java.net.URLConnection auf einen HTTP-Server hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!