Maison  >  Article  >  Java  >  Comment puis-je télécharger des fichiers et des paramètres sur un serveur HTTP en utilisant Java pur sans recourir à des bibliothèques tierces ?

Comment puis-je télécharger des fichiers et des paramètres sur un serveur HTTP en utilisant Java pur sans recourir à des bibliothèques tierces ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-25 04:11:29785parcourir

How can I upload files and parameters to an HTTP server using pure Java without relying on third-party libraries?

Téléchargements de fichiers du serveur HTTP à l'aide de Java

Introduction

Cet article traite du téléchargement de fichiers vers un Serveur HTTP à partir d'un client Java. Notre objectif est de fournir une solution simple et gratuite qui combine des paramètres et des fichiers au sein d'une requête POST.

Encodage multipart/form-data

Pour le contenu POST mixte (binaire et données de caractères), le codage multipart/form-data est généralement utilisé. Les données sont divisées en sections, chacune avec son propre en-tête et son propre corps.

Solution Java

Le code suivant montre comment télécharger des fichiers et des paramètres à l'aide d'une connexion HTTP directe. sans bibliothèques tierces :

<code class="java">// Parameters
String url = "http://example.com/upload";
String param = "value";

// File paths
File textFile = new File("/path/to/file.txt");
File binaryFile = new File("/path/to/file.bin");

// Generate unique boundary value
String boundary = Long.toHexString(System.currentTimeMillis());

// Create connection
URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

// OutputStream for writing data
try (OutputStream output = connection.getOutputStream();
     PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, charset), true)) {

    // Write parameter
    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();

    // Write 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); // Ensure file is saved using this charset
    writer.append(CRLF).flush();
    Files.copy(textFile.toPath(), output);
    output.flush(); 
    writer.append(CRLF).flush();

    // Write 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 multipart/form-data
    writer.append("--" + boundary + "--").append(CRLF).flush();
}

// Get HTTP response code
int responseCode = ((HttpURLConnection) connection).getResponseCode();
System.out.println(responseCode);</code>

Notes supplémentaires

  • Files.copy est introduit dans Java 7 ; utilisez FileUtils.copyFile pour les anciennes versions.
  • Apache Commons HttpComponents Client est une bibliothèque tierce populaire qui simplifie ce processus.
  • Apache Commons FileUpload est utilisé côté serveur pour traiter les téléchargements de fichiers.

Voir aussi

  • [Utilisation de java.net.URLConnection pour lancer et gérer les requêtes HTTP](lien vers la ressource)

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