"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como fazer upload de arquivos com parâmetros adicionais usando java.net.urlConnection e codificação multipartida/formulário?

Como fazer upload de arquivos com parâmetros adicionais usando java.net.urlConnection e codificação multipartida/formulário?

Postado em 2025-04-09
Navegar:821

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

carregando arquivos com http requests

para fazer upload de arquivos para um servidor http e também enviando parâmetros adicionais, java.net.urlConnection e multipart/formatA Aqui está uma quebra do processo:

multipart/form-data coding

multipart/form-data foi projetado para solicitações de postagem que combinam os dados binários (por exemplo, arquivos) e caracteres (por exemplo, parâmetros). A codificação envolve a divisão do corpo da solicitação em várias partes, cada uma precedida com uma string de limite. importar java.io.OutputStream; importar java.io.printwriter; importar java.net.urlConnection; importar java.nio.charset.standardSetSets; importar java.nio.file.files; importar java.nio.file.paths; classe pública FileUpload { public static void main (string [] args) lança exceção { String url = "http://example.com/upload"; String param = "value"; Arquivo textfile = new File ("/path/to/file.txt"); Arquivo binaryfile = novo arquivo ("/path/to/file.bin"); Limite de string = long.toHexString (System.CurrentTimemillis ()); Conexão de UrlConnection = novo URL (URL) .OPENCONNENCIONAL (); Connection.SetDoOutput (true); Connection.SetRequestProperty ("conteúdo-tipo", "Multipart/form-Data; limite =" limite); tente (outputStream output = Connection.getOutputStream (); PrintWriter Writer = new PrintWriter (new OtpitStreamWriter (output, StandardCharsets.utf_8), true)) { // Envie o parâmetro writer.Append ("-" limite) .Append ("\ r \ n"); writer.append ("Content-Disposition: form-data; nome = \" param \ ""). Append ("\ r \ n"); writer.Append ("Content-Type: text/plana; charset =" StandardCharSets.utf_8) .append ("\ r \ n"); writer.Append ("\ r \ n"). Append (param) .append ("\ r \ n"). Flush (); // Enviar arquivo de texto writer.Append ("-" limite) .Append ("\ r \ n"); writer.append ("Content-Disposition: form-data; nome = \" textfile \ "; filename = \" "textfile.getName ()" \ ""). Append ("\ r \ n"); writer.Append ("Content-Type: text/plana; charset =" StandardCharSets.utf_8) .append ("\ r \ n"); writer.append ("\ r \ n"). Flush (); Files.copy (textfile.topath (), saída); output.flush (); writer.append ("\ r \ n"). Flush (); // Enviar arquivo binário writer.Append ("-" limite) .Append ("\ r \ n"); writer.append ("Content-Disposition: form-data; nome = \" binaryfile \ "; nome do arquivo = \" "binaryfile.getName ()" \ ""). Append ("\ r \ n"); writer.append ("content-type:" urlConnection.guessContentTypeFromName (binaryfile.getName ())). Append ("\ r \ n"); writer.append ("Content-transfer-coding: binário"). Append ("\ r \ n"); writer.append ("\ r \ n"). Flush (); Files.copy (binaryfile.topath (), saída); output.flush (); writer.append ("\ r \ n"). Flush (); // Fim do multipart/form-data writer.append ("-" limite "-"). Append ("\ r \ n"). Flush (); } int responseCode = ((httpurlConnection) conexão) .getRESPONSecode (); System.out.println ("Código de resposta:" Responsecode); } }

Notas adicionais

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

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3