Java 클라이언트에서 HTTP 서버로 추가 매개변수와 함께 파일을 업로드하는 방법을 살펴보겠습니다. 시나리오와 솔루션.
파일과 "username"이라는 매개변수를 서버에 전달한다고 가정해 보세요. 멀티파트/양식 데이터 인코딩이 포함된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!