Rumah > Java > javaTutorial > Bagaimana untuk memuat naik fail dengan parameter tambahan menggunakan java.net.URLConnection dan pengekodan multipart/form-data?

Bagaimana untuk memuat naik fail dengan parameter tambahan menggunakan java.net.URLConnection dan pengekodan multipart/form-data?

Barbara Streisand
Lepaskan: 2024-10-25 04:56:02
asal
904 orang telah melayarinya

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

Memuat Naik Fail dengan Permintaan HTTP

Untuk memuat naik fail ke pelayan HTTP sambil turut menyerahkan parameter tambahan, java.net.URLConnection dan multipart/ pengekodan borang-data biasanya digunakan. Berikut ialah pecahan proses:

Pengekodan Berbilang Bahagian/Data Borang

Data Berbilang Bahagian/Borang direka untuk permintaan POST yang menggabungkan kedua-dua binari (mis., fail) dan data aksara (cth., parameter). Pengekodan melibatkan membahagikan badan permintaan kepada beberapa bahagian, setiap satu diawali dengan rentetan sempadan.

Kod Contoh

<code class="java">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);
    }
}</code>
Salin selepas log masuk

Nota Tambahan

  • Apache Commons FileUpload hanya diperlukan pada bahagian pelayan untuk mengendalikan fail yang dimuat naik.
  • java.net.URLConnection diutamakan untuk mengaktifkan permintaan HTTP tanpa kebergantungan luaran.
  • Untuk maklumat lanjut, rujuk dokumentasi di java.net.URLConnection dan multipart/form-data (RFC2388).

Atas ialah kandungan terperinci Bagaimana untuk memuat naik fail dengan parameter tambahan menggunakan java.net.URLConnection dan pengekodan multipart/form-data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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