Rumah > Java > javaTutorial > teks badan

Bagaimana untuk memuat naik fail dan parameter tambahan ke pelayan HTTP menggunakan java.net.URLConnection?

Mary-Kate Olsen
Lepaskan: 2024-10-25 03:02:30
asal
182 orang telah melayarinya

How to upload files and additional parameters to an HTTP server using java.net.URLConnection?

Memuat Naik Fail ke Pelayan HTTP dengan Parameter Tambahan dalam Java

Memuat naik fail ke pelayan HTTP adalah keperluan biasa untuk banyak aplikasi. Walau bagaimanapun, kadangkala ia juga perlu untuk lulus parameter tambahan bersama-sama dengan fail. Berikut ialah penyelesaian yang membolehkan anda menghantar kedua-dua fail dan parameter tanpa menggunakan perpustakaan luaran:

java.net.URLConnection dan Multipart/Form-Data

Untuk menghantar fail dan parameter, anda akan menggunakan java.net.URLConnection dan menggunakan pengekodan multipart/form-data. Data berbilang bahagian/borang membolehkan anda mencampurkan data binari (fail) dan data aksara (parameter) dalam satu permintaan HTTP.

Contoh Kod:

<code class="java">String url = "http://example.com/upload";
String charset = "UTF-8";
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());
String CRLF = "\r\n";

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);
) {
    // Send normal param.
    writer.append("--" + boundary).append(CRLF);
    writer.append("Content-Disposition: form-data; name=\"param\"").append(CRLF);
    writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF);
    writer.append(CRLF).append(param).append(CRLF).flush();

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

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

    // 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 = ((HttpURLConnection) connection).getResponseCode();
System.out.println(responseCode); </code>
Salin selepas log masuk

Nota Tambahan:

  • Pastikan anda menyediakan nilai sempadan yang unik untuk setiap permintaan berbilang bahagian.
  • Fail mesti berada dalam set aksara yang dinyatakan semasa menghantar pengepala Jenis Kandungan .
  • Klien Apache Commons HttpComponents boleh menyelaraskan lagi proses, tetapi ia tidak perlu.

Rujukan:

  • [Menggunakan java.net.URLConnection to fire and handle HTTP requests](https://docs.oracle.com/javase/tutorial/networking/urls/creating-urls.html)

Atas ialah kandungan terperinci Bagaimana untuk memuat naik fail dan parameter tambahan ke pelayan HTTP menggunakan java.net.URLConnection?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!