Apache Commons HttpClient 3.x 로 Http 서버에 파일 전송하기
Java 2014. 5. 29. 13:53
저번에 썼던 포스트에서는 Apache HttpComponents 를 이용해서 파일전송 예제를 맹글어 봤었는데.
요번에는 Apache Commons HttpClient 를 이용해서 파일전송 예제를 맹글어 보았다.
정확하게는 모르지만 왠지 내가 알기론 Apache Commons HttpClient 후로젝트가 Apache HttpComponents 로 바뀐것 같다.
그러니까 최신 API 는 아마 Apache HttpComponents 이겠지...
그런데 왜 굳이 옛날 API 로 예제를 맹글게 되었을까..?
피치못할 사정으로 JDK 1.4 기반에서 동작하도록 해야했기 때문이다 -.-
나 같은 저주 받은 개발환경이 아닌 사람들은 이전에 썼던 포스트를 참고해서 고거 쓰면 된다.
뭐 아무튼 예제 소스는 요럿다.
package com.tistory.stove99; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; 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; import org.apache.commons.lang.StringEscapeUtils; public class Http { private static final String DEFAULT_ENCODING = "UTF-8"; private String url; private String encoding; private Map param; public Http(String url){ this(url, null); } public Http(String url, String encoding){ this.encoding = encoding==null ? DEFAULT_ENCODING : encoding; this.url = url; param = new HashMap(); } /** * Http 전송 * @return */ public String submit(){ String result = null; HttpClient client = new HttpClient(); PostMethod method = new PostMethod (url); try{ Part[] parts = new Part[param.size()]; Iterator it = param.keySet().iterator(); int index = 0; while( it.hasNext() ){ String key = (String)it.next(); Object value = param.get(key); if( value instanceof File ){ // 한글 파일명이 쪽바로 처리가 안되서 StringEscapeUtils 썻음. // 받는 쪽에서는 StringEscapeUtils.unescapeHtml() 로 다시 변환바람. parts[index++] = new FilePart( key, StringEscapeUtils.escapeHtml(((File)value).getName()), (File)value, null, encoding); }else{ parts[index++] = new StringPart(key, (String)value, encoding); } } method.setRequestEntity(new MultipartRequestEntity(parts, method.getParams())); client.executeMethod(method); // read result BufferedReader br = new BufferedReader( new InputStreamReader(method.getResponseBodyAsStream(), encoding)); String buffer = null; StringBuffer tmp = new StringBuffer(); while( (buffer=br.readLine())!=null ){ tmp.append(buffer).append("\r\n"); } result = tmp.toString(); }catch (HttpException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); }finally { method.releaseConnection(); } return result; } /** * 일반 파라메터 추가 * @param name 파라메터 이름 * @param value 값 * @return */ public Http addParam(String name, String value){ param.put(name, value); return this; } /** * 업로드할 파일을 파라메터로 추가 * @param name <input type="file" name="요기들어가는 값"/> * @param file * @return */ public Http addParam(String name, File file){ param.put(name, file); return this; } /** * 테스트 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Http http = new Http("http://127.0.0.1:8888/rpm/alarm/receive.kins"); String result = http.addParam("test", "테스트다1") .addParam("test1", "테스트다2") .addParam("upload_file1", new File("d:\\야훗훗 유지보수.xlsx")) .addParam("upload_file2", new File("d:\\휴가신청서.hwp")) .submit(); System.out.println("result : " + result); } }
Maven Dependency
<dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency>
Maven 안쓸때 필요한 라이브러리 따운
'Java' 카테고리의 다른 글
JSON 문자열을 Map 으로 변환하기(Jackson 사용) (0) | 2017.09.13 |
---|---|
Apache HttpComponents 파일전송 예제 (5) | 2014.03.05 |
Java : JSOUP 를 이용, html에서 소스, 링크경로 추출후 절대 경로로 바꾸기 (2) | 2012.06.12 |
Java 정규표현식으로 문자열 중에서 ip 문자열을 배열로 추출하기 (0) | 2012.05.31 |
Java Servlet과 jQuery를 이용한 환율정보(from 네이버) 가져오기 (6) | 2012.05.24 |