Rumah >Java >javaTutorial >Bagaimana untuk memuat naik fail dan parameter tambahan ke pelayan HTTP menggunakan 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:
Rujukan:
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!