Rumah  >  Artikel  >  Java  >  Bagaimana untuk Memuat Naik Fail dengan Parameter Tambahan daripada Pelanggan Java Menggunakan Pengekodan `berbilang bahagian/data-bentuk` Tanpa Perpustakaan Pihak Ketiga?

Bagaimana untuk Memuat Naik Fail dengan Parameter Tambahan daripada Pelanggan Java Menggunakan Pengekodan `berbilang bahagian/data-bentuk` Tanpa Perpustakaan Pihak Ketiga?

Linda Hamilton
Linda Hamiltonasal
2024-10-25 05:39:29527semak imbas

How to Upload Files with Additional Parameters from a Java Client Using `multipart/form-data` Encoding Without Third-Party Libraries?

Memuat Naik Fail dengan Parameter Tambahan daripada Pelanggan Java ke Pelayan HTTP

Dalam usaha untuk memuat naik fail bersama-sama parameter tambahan daripada klien Java ke pelayan HTTP, mari kita terokai senario dan penyelesaiannya.

Bayangkan anda ingin menghantar fail dan parameter yang dipanggil "nama pengguna" ke pelayan. Bagaimanakah anda boleh mencapai perkara ini menggunakan permintaan POST dengan pengekodan berbilang bahagian/data bentuk?

Untuk memastikan perkara ini mudah, mari menjauhi perpustakaan pihak ketiga dan bergantung pada alatan terbina dalam Java.

<code class="java">import java.io.File;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URLConnection;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Scanner;

public class HttpFileUploadWithParameters {

    private static final String BOUNDARY = Long.toHexString(System.currentTimeMillis());
    private static final String CRLF = "\r\n";
    private static final String CHARSET = "UTF-8";

    public static void main(String[] args) throws Exception {
        String url = "http://example.com/upload";

        File file = new File("/path/to/file.txt");
        String parameter = "value";

        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)) {

            // Write parameter
            writer.append("--" + BOUNDARY).append(CRLF);
            writer.append("Content-Disposition: form-data; name=\"parameter\"").append(CRLF);
            writer.append("Content-Type: text/plain; charset=" + CHARSET).append(CRLF);
            writer.append(CRLF).append(parameter).append(CRLF).flush();

            // Write file
            writer.append("--" + BOUNDARY).append(CRLF);
            writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"").append(CRLF);
            writer.append("Content-Type: application/octet-stream").append(CRLF);
            writer.append(CRLF).flush();
            Files.copy(file.toPath(), output);
            output.flush(); // Important before continuing with writer!
            writer.append(CRLF).flush(); // CRLF is important! It indicates end of boundary.

            // 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 = ((java.net.HttpURLConnection) connection).getResponseCode();
        System.out.println(responseCode); // Should be 200
    }
}</code>

Atas ialah kandungan terperinci Bagaimana untuk Memuat Naik Fail dengan Parameter Tambahan daripada Pelanggan Java Menggunakan Pengekodan `berbilang bahagian/data-bentuk` Tanpa Perpustakaan Pihak Ketiga?. 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