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