Maison  >  Article  >  Java  >  Comment télécharger des fichiers et des paramètres supplémentaires sur un serveur HTTP à l'aide de java.net.URLConnection ?

Comment télécharger des fichiers et des paramètres supplémentaires sur un serveur HTTP à l'aide de java.net.URLConnection ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-25 03:02:30181parcourir

How to upload files and additional parameters to an HTTP server using java.net.URLConnection?

Télécharger des fichiers vers un serveur HTTP avec des paramètres supplémentaires en Java

Le téléchargement de fichiers vers un serveur HTTP est une nécessité courante pour de nombreuses applications. Cependant, il est parfois nécessaire de transmettre des paramètres supplémentaires avec les fichiers. Voici une solution qui vous permet d'envoyer à la fois des fichiers et des paramètres sans utiliser de bibliothèques externes :

java.net.URLConnection et Multipart/Form-Data

Pour envoyer des fichiers et paramètres, vous utiliserez java.net.URLConnection et emploierez le codage multipart/form-data. Multipart/form-data vous permet de mélanger des données binaires (fichiers) et des données de caractères (paramètres) dans une seule requête HTTP.

Exemple de code :

<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>

Remarques supplémentaires :

  • Assurez-vous de fournir une valeur limite unique pour chaque requête en plusieurs parties.
  • Les fichiers doivent être dans le jeu de caractères spécifié lors de l'envoi de l'en-tête Content-Type. .
  • Le client Apache Commons HttpComponents peut rationaliser davantage le processus, mais ce n'est pas nécessaire.

Référence :

  • [Utilisation java.net.URLConnection pour déclencher et gérer les requêtes HTTP](https://docs.oracle.com/javase/tutorial/networking/urls/creating-urls.html)

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