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

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