ホームページ >Java >&#&チュートリアル >サードパーティのライブラリを使用せずに「multipart/form-data」エンコーディングを使用して Java クライアントから追加パラメータを含むファイルをアップロードする方法
追加パラメーターを含むファイルを Java クライアントから HTTP サーバーにアップロードする方法について調べてみましょう。シナリオとその解決策。
ファイルと「ユーザー名」というパラメーターをサーバーに渡したいと想像してください。 multipart/form-data エンコーディングを使用した POST リクエストを使用してこれを実現するにはどうすればよいでしょうか?
物事をわかりやすくするために、サードパーティのライブラリを避け、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>
以上がサードパーティのライブラリを使用せずに「multipart/form-data」エンコーディングを使用して Java クライアントから追加パラメータを含むファイルをアップロードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。