"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-07
Parcourir:939

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

Téléchargement de 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 utiliserez 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 :

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

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é lorsque envoyer 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 de java.net.URLConnection pour lancer et gérer les requêtes HTTP](https://docs.oracle.com/javase/tutorial/networking/urls/creating-urls.html)
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3