'2016/03/11'에 해당되는 글 1건

  1. 2016.03.11 Apache Common httpclient에서 POST로 파일 전송하기


Apache Common httpclient를 쓴다는 의미는 대부분 로직단에서 OpenAPI 같은걸 호출하고 있다는 의미라서 String이나 Base64타입의 파라메터들을 사용하게 일반적이다.

부끄럽지만 나도 그런편이라 처음으로 파일을 파라메터로 날려야 할 상황이 생겨서 조금은 난감했다.

결과적으로 파일 객체를 FilePart 객체에 넣어서 PostMethod객체의 RequestEntry에 넣어주면 된다.

말이 어려우니깐 쉽게 소스로 풀어보자.


import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;

public class TestPost {
		
	public void sendPostFile(){
		String url = "http://localhost:8080/testblabla/acceptFile.do"; //걍 테스트용으로 대충 만든 URL
		
		PostMethod post = new PostMethod(url); //Post 객체 하나 만듬. 
		HttpClient client = new HttpClient();
		int statusCode;
		String resposeMessage = null;
		
		try {
			List parts = new ArrayList(); // Paramater들을 넣을 리스트 객체 하나 만들고~
			parts.add(new StringPart("saveDirectory", "shared")); //대충 파일외에 String Param이 있다고 가정.......

			File file = new File("./test.txt"); // 날릴 파일 
			parts.add(new FilePart("saveFile", "test.txt", file)); //객체생성자는 param명, 파일이름, 파일 객체 순으로...
			
			post.setRequestEntity(new MultipartRequestEntity((Part[])parts.toArray(new Part[parts.size()]), post.getParams())); 
			//파일을 전송하야 하니 당연히 Multipart타입으로~
			
			client.getHttpConnectionManager().getParams().setConnectionTimeout(5000); //접속~
			statusCode = client.executeMethod(post); //http 응답 Status값 받기(200, 404, 500등등)
			resposeMessage = post.getResponseBodyAsString(); // 요청에 대한 응답 메시지가 있다고 가정 
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			post.releaseConnection();
		}
	}
}

 


 

 


 


Posted by 오달봉
,