Rumah  >  Artikel  >  Java  >  Bagaimana untuk Memuat Naik Fail dan Parameter Tambahan dengan `URLConnection` Java?

Bagaimana untuk Memuat Naik Fail dan Parameter Tambahan dengan `URLConnection` Java?

Barbara Streisand
Barbara Streisandasal
2024-10-25 02:18:02200semak imbas

How to Upload Files and Additional Parameters with Java's `URLConnection`?

Cara Memuat Naik Fail dari Pelanggan Java ke Pelayan HTTP dengan Parameter Tambahan

Apabila menggunakan permintaan HTTP POST untuk memuat naik fail daripada klien Java ke pelayan, ia adalah perkara biasa ingin memasukkan parameter tambahan bersama-sama dengan fail. Berikut ialah penyelesaian yang mudah dan cekap tanpa memerlukan perpustakaan luaran:

Gunakan java.net.URLConnection untuk mewujudkan permintaan HTTP dan menyediakannya untuk data borang berbilang bahagian, format pengekodan popular untuk mengendalikan kedua-dua binari dan data teks. Berikut ialah contoh yang termasuk param parameter tambahan dan fail textFile dan binaryFile:

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

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 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 boundary
    writer.append("--" + boundary + "--").append(CRLF).flush();
}</code>

Selepas menyediakan permintaan, anda boleh menyalakannya dan mendapatkan semula kod respons:

<code class="java">((HttpURLConnection) connection).getResponseCode();</code>

Untuk lebih lanjut senario lanjutan atau untuk memudahkan proses, pertimbangkan untuk menggunakan perpustakaan pihak ketiga seperti Apache Commons HttpComponents Client.

Atas ialah kandungan terperinci Bagaimana untuk Memuat Naik Fail dan Parameter Tambahan dengan `URLConnection` Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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