> Java > java지도 시간 > 본문

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

Patricia Arquette
풀어 주다: 2024-10-25 04:11:29
원래의
793명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!