Maison > Java > javaDidacticiel > Comment télécharger des fichiers avec des paramètres supplémentaires à l'aide de java.net.URLConnection et de l'encodage multipart/form-data ?

Comment télécharger des fichiers avec des paramètres supplémentaires à l'aide de java.net.URLConnection et de l'encodage multipart/form-data ?

Barbara Streisand
Libérer: 2024-10-25 04:56:02
original
911 Les gens l'ont consulté

How to upload files with additional parameters using java.net.URLConnection and multipart/form-data encoding?

Téléchargement de fichiers avec des requêtes HTTP

Pour télécharger des fichiers sur un serveur HTTP tout en soumettant également des paramètres supplémentaires, java.net.URLConnection et multipart/ le codage de données de formulaire est couramment utilisé. Voici un aperçu du processus :

Multipart/Form-Data Encoding

Multipart/form-data est conçu pour les requêtes POST qui combinent à la fois des fichiers binaires (par exemple, des fichiers) et des données de caractères (par exemple, des paramètres). L'encodage consiste à diviser le corps de la requête en plusieurs parties, chacune précédée d'une chaîne de délimitation.

Exemple de code

<code class="java">import java.io.File;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class FileUpload {

    public static void main(String[] args) throws Exception {
        String url = "http://example.com/upload";
        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());

        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, StandardCharsets.UTF_8), true)) {
            // Send parameter
            writer.append("--" + boundary).append("\r\n");
            writer.append("Content-Disposition: form-data; name=\"param\"").append("\r\n");
            writer.append("Content-Type: text/plain; charset=" + StandardCharsets.UTF_8).append("\r\n");
            writer.append("\r\n").append(param).append("\r\n").flush();

            // Send text file
            writer.append("--" + boundary).append("\r\n");
            writer.append("Content-Disposition: form-data; name=\"textFile\"; filename=\"" + textFile.getName() + "\"").append("\r\n");
            writer.append("Content-Type: text/plain; charset=" + StandardCharsets.UTF_8).append("\r\n");
            writer.append("\r\n").flush();
            Files.copy(textFile.toPath(), output);
            output.flush();
            writer.append("\r\n").flush();

            // Send binary file
            writer.append("--" + boundary).append("\r\n");
            writer.append("Content-Disposition: form-data; name=\"binaryFile\"; filename=\"" + binaryFile.getName() + "\"").append("\r\n");
            writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(binaryFile.getName())).append("\r\n");
            writer.append("Content-Transfer-Encoding: binary").append("\r\n");
            writer.append("\r\n").flush();
            Files.copy(binaryFile.toPath(), output);
            output.flush();
            writer.append("\r\n").flush();

            // End of multipart/form-data
            writer.append("--" + boundary + "--").append("\r\n").flush();
        }

        int responseCode = ((HttpURLConnection) connection).getResponseCode();
        System.out.println("Response Code: " + responseCode);
    }
}</code>
Copier après la connexion

Remarques supplémentaires

  • Apache Commons FileUpload n'est requis que côté serveur pour gérer les fichiers téléchargés.
  • java.net.URLConnection est préféré pour lancer des requêtes HTTP sans dépendances externes.
  • Pour plus d'informations, reportez-vous à la documentation sur java.net.URLConnection et multipart/form-data (RFC2388).

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