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();
}
}
}
'끄적끄적노트' 카테고리의 다른 글
개발서버 트래픽이 급 올라감(DDOS 관련) (0) | 2016.04.25 |
---|---|
한영오토마타 (영어 -> 한글) (0) | 2016.03.17 |
vim에서 ^M제거 (0) | 2016.01.14 |
오라클 11g 설치 사이트 참고 할데~ (0) | 2015.05.20 |
자바에서 i++에 대한 의미 (0) | 2014.04.08 |