Lors de l'utilisation de requêtes HTTP POST pour télécharger des fichiers d'un client Java vers un serveur, il est courant vouloir inclure des paramètres supplémentaires avec les fichiers. Voici une solution simple et efficace sans avoir besoin de bibliothèques externes :
Utilisez java.net.URLConnection pour établir la requête HTTP et la configurer pour les données de formulaire en plusieurs parties, un format d'encodage populaire pour gérer à la fois les binaires et données textuelles. Voici un exemple qui inclut des paramètres supplémentaires et des fichiers textFile et binaireFile :
<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>
Après avoir configuré la requête, vous pouvez la lancer et récupérer le code de réponse :
<code class="java">((HttpURLConnection) connection).getResponseCode();</code>
Pour en savoir plus scénarios avancés ou pour simplifier le processus, envisagez d'utiliser des bibliothèques tierces comme Apache Commons HttpComponents Client.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!