Java에서 추가 매개변수를 사용하여 HTTP 서버에 파일 업로드
HTTP 서버에 파일을 업로드하는 것은 많은 애플리케이션에서 공통적으로 필요한 작업입니다. 그러나 때로는 파일과 함께 추가 매개변수를 전달해야 하는 경우도 있습니다. 다음은 외부 라이브러리를 사용하지 않고 파일과 매개변수를 모두 보낼 수 있는 솔루션입니다.
java.net.URLConnection 및 Multipart/Form-Data
파일을 보내고 매개변수를 사용하려면 java.net.URLConnection을 활용하고 다중 부분/양식 데이터 인코딩을 사용합니다. Multipart/form-data를 사용하면 단일 HTTP 요청에서 바이너리 데이터(파일)와 문자 데이터(매개변수)를 혼합할 수 있습니다.
예제 코드:
<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>
추가 참고 사항:
참조:
위 내용은 java.net.URLConnection을 사용하여 파일 및 추가 매개변수를 HTTP 서버에 업로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!