Maison > Java > javaDidacticiel > le corps du texte

Comment télécharger des fichiers avec des paramètres supplémentaires à partir d'un client Java à l'aide de l'encodage « multipart/form-data » sans bibliothèques tierces ?

Linda Hamilton
Libérer: 2024-10-25 05:39:29
original
541 Les gens l'ont consulté

How to Upload Files with Additional Parameters from a Java Client Using `multipart/form-data` Encoding Without Third-Party Libraries?

Téléchargement de fichiers avec des paramètres supplémentaires d'un client Java vers un serveur HTTP

Dans le but de télécharger des fichiers avec des paramètres supplémentaires d'un client Java vers un serveur HTTP, explorons un scénario et sa solution.

Imaginez que vous souhaitiez transmettre un fichier et un paramètre appelé "nom d'utilisateur" à un serveur. Comment y parviendriez-vous en utilisant une requête POST avec un encodage multipart/form-data ?

Pour que les choses restent simples, évitons les bibliothèques tierces et comptons sur les outils intégrés de Java.

<code class="java">import java.io.File;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URLConnection;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Scanner;

public class HttpFileUploadWithParameters {

    private static final String BOUNDARY = Long.toHexString(System.currentTimeMillis());
    private static final String CRLF = "\r\n";
    private static final String CHARSET = "UTF-8";

    public static void main(String[] args) throws Exception {
        String url = "http://example.com/upload";

        File file = new File("/path/to/file.txt");
        String parameter = "value";

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

            // Write parameter
            writer.append("--" + BOUNDARY).append(CRLF);
            writer.append("Content-Disposition: form-data; name=\"parameter\"").append(CRLF);
            writer.append("Content-Type: text/plain; charset=" + CHARSET).append(CRLF);
            writer.append(CRLF).append(parameter).append(CRLF).flush();

            // Write file
            writer.append("--" + BOUNDARY).append(CRLF);
            writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"").append(CRLF);
            writer.append("Content-Type: application/octet-stream").append(CRLF);
            writer.append(CRLF).flush();
            Files.copy(file.toPath(), output);
            output.flush(); // Important before continuing with writer!
            writer.append(CRLF).flush(); // CRLF is important! It indicates end of boundary.

            // 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 = ((java.net.HttpURLConnection) connection).getResponseCode();
        System.out.println(responseCode); // Should be 200
    }
}</code>
Copier après la connexion

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!