Maison > Java > javaDidacticiel > le corps du texte

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

Barbara Streisand
Libérer: 2024-10-25 02:18:02
original
290 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal