2009-12-24 3 views
0

간단한 게시물 요청을 보내는 간단한 미리보기를 작성하고 있습니다. 멀티 파트 파일 업로드를 포함한 게시 요청 만들기

현재 나는과 같이 요청을 건물입니다 :

// Construct data 
    String data = URLEncoder.encode("param1", "UTF-8") + "=" + URLEncoder.encode("val1", "UTF-8"); 
    data += "&" + URLEncoder.encode("param2", "UTF-8") + "=" + URLEncoder.encode("val2", "UTF-8"); 

    // Send data 
    URL url = new URL("http://server:8080/servlet/upload"); 
    URLConnection conn = url.openConnection(); 
    conn.setDoOutput(true); 
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.write(data); 
    wr.flush(); 

    // do stuff with response.... 

이 지금과 같이 작동합니다. 하지만 다중 업로드 POST 요청으로 파일 업로드를 추가해야합니다. 어떻게해야합니까? 가능하다면 HttpClient을 공유지에서 사용하지 않는 것이 좋습니다.

답변

3

현재 HTTP를 사용하고 있지 않습니다. POST를 수행하려는 경우 가장 먼저해야 할 일은 올바른 헤더 등을 보내 게하여 실제로 HTTP 연결에 참여하는 것입니다. 파일 내용을 POST에 제대로 인코딩하려면 RFC 1867 (http://tools.ietf.org/html/rfc1867)을 따라야합니다. 이것은 쉬운 일이 아닙니다. 그래서 여러분을 위해이 라이브러리가 있습니다. 그래서 물어야합니다 : 왜 HttpClient를 피하십시오? 나는 항상이 목적을 위해 그것을 사용했습니다. 그것은 믿을 만하고, 완전하며, 실행 가능합니다. 당신은 (메모리/디스크) 공간이 부족합니까? Upload files by sending multipart request programmatically

그것은 외부 의존성이없는,되는 코드를 포함 코멘트 만 ~ 150 라인이며 :

+0

통합 문제가 있습니다 만, 요청 인코딩을 구현하는 것이 더 쉽다면 외부 lib와 함께 갈 것입니다. 감사 :) –

1

요점은 RFC 1687RFC 2388에 지정된 형식의 데이터가 포함 된 출력 스트림을 구성해야한다는 것입니다. 그것은 많은 작업입니다, 나는 킥오프 코드 예를 게시하지 않을 것입니다. 죄송합니다. 그러나 RFC에는 명확한 정보와 몇 가지 예가 들어있어 데이터가 어떻게 보이는지 보여줍니다. 그것은 절대적으로 가능합니다.

+0

하이퍼 링크는 맞지만 하이퍼 텍스트는 아닙니다. :) –

+0

HTML 부분이없는 동일한 이야기에 대해 RFC 2388을 추가했습니다. – BalusC

0

이 같은이 시도는

File f = new File(filePath); 
PostMethod filePost = new PostMethod(url); 
Part[] parts = { new FilePart("file", f) }; 
filePost.setRequestEntity(new MultipartRequestEntity(parts, 
filePost.getParams())); 
HttpClient client = new HttpClient(); 
status = client.executeMethod(filePost); 
logger.info("upload status: " + status); 
0

이 코드는 나를 잘 봉사 내 경우에는 일 IMHO는 Apache HttpClient 라이브러리보다 쉽게 ​​처리 할 수 ​​있습니다.