>  기사  >  Java  >  타사 라이브러리에 의존하지 않고 순수 Java를 사용하여 HTTP 서버에 파일과 매개변수를 업로드하려면 어떻게 해야 합니까?

타사 라이브러리에 의존하지 않고 순수 Java를 사용하여 HTTP 서버에 파일과 매개변수를 업로드하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-25 04:11:29785검색

How can I upload files and parameters to an HTTP server using pure Java without relying on third-party libraries?

Java를 사용한 HTTP 서버 파일 업로드

소개

이 문서에서는 Java 클라이언트의 HTTP 서버. 우리는 POST 요청 내에서 매개변수와 파일을 결합하는 간단하고 무료 솔루션을 제공하는 것을 목표로 합니다.

Multipart/Form-Data Encoding

혼합 POST 콘텐츠(바이너리 및 문자 데이터), 다중 부분/양식 데이터 인코딩이 일반적으로 사용됩니다. 데이터는 각각 고유한 헤더와 본문을 포함하는 섹션으로 나누어집니다.

Java 솔루션

다음 코드는 직접 HTTP 연결을 사용하여 파일과 매개변수를 업로드하는 방법을 보여줍니다. 타사 라이브러리 없음:

<code class="java">// Parameters
String url = "http://example.com/upload";
String param = "value";

// File paths
File textFile = new File("/path/to/file.txt");
File binaryFile = new File("/path/to/file.bin");

// Generate unique boundary value
String boundary = Long.toHexString(System.currentTimeMillis());

// Create connection
URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

// OutputStream for writing data
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=\"param\"").append(CRLF);
    writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF);
    writer.append(CRLF).append(param).append(CRLF).flush();

    // Write 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); // Ensure file is saved using this charset
    writer.append(CRLF).flush();
    Files.copy(textFile.toPath(), output);
    output.flush(); 
    writer.append(CRLF).flush();

    // Write 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 multipart/form-data
    writer.append("--" + boundary + "--").append(CRLF).flush();
}

// Get HTTP response code
int responseCode = ((HttpURLConnection) connection).getResponseCode();
System.out.println(responseCode);</code>

추가 참고 사항

  • Files.copy는 Java 7에 도입되었습니다. 이전 버전의 경우 FileUtils.copyFile을 사용하세요.
  • Apache Commons HttpComponents Client는 이 프로세스를 단순화하는 널리 사용되는 타사 라이브러리입니다.
  • Apache Commons FileUpload는 서버 측에서 파일 업로드를 처리하는 데 사용됩니다.

참조

  • [java.net.URLConnection을 사용하여 HTTP 요청 실행 및 처리](리소스 링크)

위 내용은 타사 라이브러리에 의존하지 않고 순수 Java를 사용하여 HTTP 서버에 파일과 매개변수를 업로드하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.