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

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-25 03:02:30181semak imbas

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>

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!

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