Maison >Java >javaDidacticiel >Comment télécharger des fichiers et des paramètres supplémentaires avec « URLConnection » de Java ?

Comment télécharger des fichiers et des paramètres supplémentaires avec « URLConnection » de Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-25 02:18:02296parcourir

How to Upload Files and Additional Parameters with Java's `URLConnection`?

Comment télécharger des fichiers d'un client Java vers un serveur HTTP avec des paramètres supplémentaires

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn