Apache HttpClient-멀티 파트 업로드
HttpClient를 사용하여 멀티 파트 업로드를 수행 할 수 있습니다. 즉, 더 큰 객체를 작은 부분에 업로드 할 수 있습니다. 이 장에서는 간단한 텍스트 파일을 업로드하여 HTTP 클라이언트에서 멀티 파트 업로드를 시연합니다.
일반적으로 모든 멀티 파트 업로드에는 세 부분이 포함됩니다.
업로드 시작
개체 부분 업로드
멀티 파트 업로드 완료
HttpClient를 사용한 멀티 파트 업로드의 경우 다음 단계를 따라야합니다.
멀티 파트 빌더를 만듭니다.
원하는 부분을 추가하십시오.
빌드를 완료하고 멀티 파트 HttpEntity를 얻습니다.
위의 muti-part 엔티티를 설정하여 요청을 작성하십시오.
요청을 실행하십시오.
다음은 HttpClient 라이브러리를 사용하여 멀티 파트 엔티티를 업로드하는 단계입니다.
1 단계-HttpClient 개체 만들기
그만큼 createDefault() 의 방법 HttpClients 클래스는 클래스의 객체를 반환합니다. CloseableHttpClient, HttpClient 인터페이스의 기본 구현입니다. 이 방법을 사용하여 HttpClient 객체를 만듭니다-
//Creating CloseableHttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
2 단계-FileBody 개체 만들기
FileBody클래스는 파일이 지원하는 이진 본문 부분을 나타냅니다. 전달하여이 클래스를 인스턴스화하십시오.File 개체와 ContentType 콘텐츠 유형을 나타내는 개체입니다.
//Creating a File object
File file = new File("sample.txt");
//Creating the FileBody object
FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);
3 단계-MultipartEntityBuilder 생성
그만큼 MultipartEntityBuilder 클래스는 다중 부분을 만드는 데 사용됩니다. HttpEntity목적. 다음을 사용하여 개체를 만듭니다.create() 메서드 (동일 클래스).
//Creating the MultipartEntityBuilder
MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();
4 단계-모드 설정
ㅏ MultipartEntityBuilderSTRICT, RFC6532 및 BROWSER_COMPATIBLE의 세 가지 모드가 있습니다. 버튼을 사용하여 원하는 모드로 설정하십시오.setMode() 방법.
//Setting the mode
entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
5 단계-원하는 다양한 부품 추가
방법 사용 addTextBody(), addPart () 및 addBinaryBody(), 간단한 텍스트, 파일, 스트림 및 기타 개체를 MultipartBuilder. 이 방법을 사용하여 원하는 내용을 추가하십시오.
//Adding text
entitybuilder.addTextBody("sample_text", "This is the text part of our file");
//Adding a file
entitybuilder.addBinaryBody("image", new File("logo.png"));
6 단계-단일 엔티티 빌드
다음을 사용하여 이러한 모든 부품을 단일 엔티티로 빌드 할 수 있습니다. build() 의 방법 MultipartEntityBuilder수업. 이 방법을 사용하여 모든 부품을 단일HttpEntity.
//Building a single entity using the parts
HttpEntity mutiPartHttpEntity = entityBuilder.build();
7 단계-RequestBuilder 객체 생성
클래스 RequestBuilder매개 변수를 추가하여 요청을 작성하는 데 사용됩니다. 요청이 PUT 또는 POST 유형 인 경우 매개 변수를 URL 인코딩 엔티티로 요청에 추가합니다.
다음을 사용하여 RequestBuilder 객체 (POST 유형)를 만듭니다. post()방법. 그리고 요청을 보내려는 Uri를 매개 변수로 전달합니다.
//Building the post request object
RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post");
8 단계-엔터티 개체를 RequestBuilder로 설정
위에서 생성 한 멀티 파트 엔티티를 다음을 사용하여 RequestBuilder로 설정합니다. setEntity() 의 방법 RequestBuilder 수업.
//Setting the entity object to the RequestBuilder
reqbuilder.setEntity(mutiPartHttpEntity);
9 단계-HttpUriRequest 빌드
빌드 HttpUriRequest 요청 개체를 사용하여 build() 의 방법 RequestBuilder 수업.
//Building the request
HttpUriRequest multipartRequest = reqbuilder.build();
10 단계-요청 실행
사용 execute() 메서드의 경우 이전 단계에서 빌드 된 요청을 실행합니다 (요청을이 메서드에 대한 매개 변수로 무시).
//Executing the request
HttpResponse httpresponse = httpclient.execute(multipartRequest);
예
다음 예제는 HttpClient 라이브러리를 사용하여 멀티 파트 요청을 보내는 방법을 보여줍니다. 이 예에서는 파일로 지원되는 멀티 파트 요청을 보내려고합니다.
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
public class MultipartUploadExample {
public static void main(String args[]) throws Exception{
//Creating CloseableHttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
//Creating a file object
File file = new File("sample.txt");
//Creating the FileBody object
FileBody filebody = new FileBody(file, ContentType.DEFAULT_BINARY);
//Creating the MultipartEntityBuilder
MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();
//Setting the mode
entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
//Adding text
entitybuilder.addTextBody("sample_text", "This is the text part of our file");
//Adding a file
entitybuilder.addBinaryBody("image", new File("logo.png"));
//Building a single entity using the parts
HttpEntity mutiPartHttpEntity = entitybuilder.build();
//Building the RequestBuilder request object
RequestBuilder reqbuilder = RequestBuilder.post("http://httpbin.org/post");
//Set the entity object to the RequestBuilder
reqbuilder.setEntity(mutiPartHttpEntity);
//Building the request
HttpUriRequest multipartRequest = reqbuilder.build();
//Executing the request
HttpResponse httpresponse = httpclient.execute(multipartRequest);
//Printing the status and the contents of the response
System.out.println(EntityUtils.toString(httpresponse.getEntity()));
System.out.println(httpresponse.getStatusLine());
}
}
산출
실행시 위의 프로그램은 다음과 같은 출력을 생성합니다.
{
"args": {},
"data": "",
"files": {
"image": "data:application/octets66PohrH3IWNk1FzpohfdXPIfv9X3490FGcuXsHn9X0piCwomF/xdgADZ9GsfSyvLYAAAAAE
lFTkSuQmCC"
},
"form": {
"sample_text": "This is the text part of our file"
},
"headers": {
"Accept-Encoding": "gzip,deflate",
"Connection": "close",
"Content-Length": "11104",
"Content-Type": "multipart/form-data;
boundary=UFJbPHT7mTwpVq70LpZgCi5I2nvxd1g-I8Rt",
"Host": "httpbin.org",
"User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_91)"
},
"json": null,
"origin": "117.216.245.180",
"url": "http://httpbin.org/post"
}
HTTP/1.1 200 OK