CORE
HOME > JAVA > J2SE > CORE
2019.01.13 / 22:24

[JAVA]HttpClient¸¦ ÀÌ¿ëÇÑ ÆÄÀÏÀü¼Û ¹× ¼ö½Å¹æ¹ý

hanulbit
Ãßõ ¼ö 271

±âÁ¸ HttpClientÀÇ ¸ÖƼÆÄÆ® ¾÷·Îµå APIµéÀÌ 4.3 ¹öÀü ÀÌÈķΠDeprecated µÇ¾î ÃֽŠ¹öÀü¿¡ ¸Â´Â APIµé·Î ´ëüÇÏ´Ùº¸´Ï

½ÃÇàÂø¿À°¡ ¸¹¾Ò´Ù. ´ÙÀ½Àº ÆÄÀÏ Àü¼Û½Ã Old API¸¦ ÀÌ¿ëÇÑ ¹æ¹ý°ú ÃֽŠ¹æ¹ýÀÇ Â÷ÀÌÁ¡À» º¸¿©ÁÖ´Â ÄÚµåÀÌ´Ù.

 

(ÀÚ¼¼ÇÑ ³»¿ëÀº http://www.alphafactory.co.kr/post/2013/12/12/multipart-upload-method-in-apache-4-3/ ÂüÁ¶)

 

  /* °ú°Å¹æ½Ä
      FileBody bin = new FileBody(new File( filePath + fileName ));
      StringBody comment = new StringBody("BETHECODER HttpClient Tutorials");

      MultipartEntity reqEntity = new MultipartEntity();
      reqEntity.addPart("fileup0", bin);
      reqEntity.addPart("fileup1", comment);
      reqEntity.addPart("ONE", new StringBody("11111111"));
      reqEntity.addPart("TWO", new StringBody("222222222"));
      httppost.setEntity(reqEntity);
   */
    

      //ÃֽŹæ½Ä - À§¿Í µ¿ÀÏÇÑ ±â´ÉÀ» ÇÏ´Â Äڵ带 ÃֽŠAPI·Î ´ëüÇÑ ÄÚµåÀÓ
      MultipartEntityBuilder meb = MultipartEntityBuilder.create();
      meb.addBinaryBody("fileup0", new File(filePath + fileName));
      meb.addTextBody("fileup1", "BETHECODER HttpClient Tutorials");
      meb.addTextBody("ONE", "11111111");
      meb.addTextBody("TWO", "222222222");

  

±âÁ¸ÀÇ MultipartEntity ¿Í StringBody°¡ deprecated µÇ¾ú°í À̸¦ MultipartEntityBuilder°¡ ´ëüÇÑ´Ù.

´ÙÀ½Àº MultipartEntityBuilder¸¦ ÀÌ¿ëÇÑ ÆÄÀÏÀü¼Û ÄÚµå(Client´Ü¿¡¼­ ½ÇÇà)ÀÌ´Ù.

/*Author : Ȳö¿¬*/

package sample.httpcall;

 

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

 

public class FileSenderByHttpClient {

    private String url;
    private MultipartEntityBuilder params;
    private static final String DEFAULT_ENCODING = "UTF-8";
    
    /**
     * @param url Á¢¼ÓÇÒ url
     */
    public FileSenderByHttpClient(String url){
        this.url = url;
        params = MultipartEntityBuilder.create();
    }
    
    public static void main(String[] args) throws Exception {
     
        //ÆÄÀÏÀ» ¼ö½ÅÇÏ´Â ¼­¹öÃø URL
        FileSenderByHttpClient http = new FileSenderByHttpClient("http://exam.mvn.boards/zzetc/file/httptest.jsp");
     
        //Àü¼Û´ë»ó ÆÄÀϵé
        String filePath1 = "C:/egov_dev/testdata/sender/DSC01127.jpg";
        String filePath2 = "C:/egov_dev/testdata/sender/Á¤º¸º¸È£±â»ç.hwp";
       
        //¹®ÀÚ¿­°ú ÆÄÀϵéÀ» µ¿½Ã Àü¼Û
        String rtn = http.addParam("test", "¹®ÀÚ¿­ ÆĶó¸ÞÅÍ Å×½ºÆ®´Ù!")
                              .addParam("upload_file1", new File(filePath1))
                              .addParam("upload_file2", new File(filePath2))
                              .submit();
        System.out.println("result : " + rtn);
    }
   
    /**
     * Map °´Ã¼¿¡ ÆĶó¹ÌÅ͸í°ú ÆĶó¹ÌÅÍ°ªÀ» ¼³Á¤Çؼ­ Çѹø¿¡ Àü´Þ
     * @param Map°´Ã¼, ÆĶó¸ÞÅ͵éÀº UTF-8·Î ÀÎÄÚµù µÊ
     * @return
     */
    public FileSenderByHttpClient addParam(Map<String, Object> param){
        return addParam(param, DEFAULT_ENCODING);
    }
    
    /**
     * Map °´Ã¼¿¡ ´ã°ÜÁø ÆĶó¹ÌÅÍ°ªÀÇ Å¸ÀÔ¿¡ µû¶ó ÀûÀýÇÑ addParam()À» È£ÃâÇÑ´Ù.
     * @param Map°´Ã¼
     * @param encoding charset
     * @return
     */
    public FileSenderByHttpClient addParam(Map<String, Object> param, String encoding){
        for( Map.Entry<String, Object> e : param.entrySet() ){
            if (e.getValue() instanceof File) {
                addParam(e.getKey(), (File)e.getValue(), encoding);
            }else{
                addParam(e.getKey(), (String)e.getValue(), encoding);
            }
        }
        return this;
    }
    
    /**
     * ¹®ÀÚ¿­ ÆĶó¹ÌÅ͸¦ Ãß°¡ÇÑ´Ù.
     * @param name ÆĶó¹ÌÅÍ ¸í
     * @param value ÆĶó¹ÌÅÍ °ª
     * @return
     */
    public FileSenderByHttpClient addParam(String name, String value){
        return addParam(name, value, DEFAULT_ENCODING);
    }
    
    public FileSenderByHttpClient addParam(String name, String value, String encoding){
        params.addPart(name, new StringBody(value, ContentType.create("text/plain", encoding)));
        
        return this;
    }
    
    /**
     * ¾÷·ÎµåÇÒ ÆÄÀÏ ÆĶó¹ÌÅ͸¦ Ãß°¡ÇÑ´Ù.
     * @param name ÆĶó¹ÌÅÍ ¸í
     * @param file ÆÄÀÏ
     * @return
     */
    public FileSenderByHttpClient addParam(String name, File file){
        return addParam(name, file, DEFAULT_ENCODING);
    }
    
    public FileSenderByHttpClient addParam(String name, File file, String encoding){
        if( file.exists() ){
            try{
                params.addPart( name, 
                                        new FileBody(file, ContentType.create("application/octet-stream"),
                                        URLEncoder.encode(file.getName(), encoding)));
            }catch( Exception ex ){ ex.printStackTrace(); }
            
        }
        return this;
    }
 
    /**
     * Ÿ°Ù URL·Î POST ¿äûÀ» º¸³½´Ù.
     * @return ¿äû°á°ú
     * @throws Exception
     */
    public String submit() throws Exception{
     
        CloseableHttpClient http = HttpClients.createDefault();
        StringBuffer result = new StringBuffer();
        
        try{
            HttpPost post = new HttpPost(url);
            post.setEntity(params.build());
            
            /*************  ŸÄÏ URL·Î POST ¿äû **************/
            CloseableHttpResponse response = http.execute(post);
            try{
                HttpEntity res = response.getEntity();
                BufferedReader br = new BufferedReader(new InputStreamReader(res.getContent(), Charset.forName("UTF-8")));
                
                String buffer = null;
                while( (buffer = br.readLine())!=null ){
                    result.append(buffer).append("\r\n");
                }
            }finally{
                response.close();
            }
        }finally{
            http.close();
        }
 
        return result.toString();
    }

 

»ó±â Äڵ忡 »ç¿ëµÈ ¶óÀ̺귯¸®µéÀº ´ÙÀ½°ú °°´Ù.

 

  httpclient-4.3.3.jar

  httpmime-4.3.3.jar

  httpcore-4.3.2.jar

  httpclient-cache-4.3.3.jar

  jsr311-api-1.1.1.jar

  fluent-hc-4.3.3.jar

  commons-logging-1.1.3.jar

  commons-io-2.4.jar

  commons-httpclient-3.1.jar

  commons-fileupload-1.3.1.jar

  commons-codec-1.6.jar

 

ÀÏ´Ü ¸ðµÎ ³ª¿­Çߴµ¥ »ç¿ëÇÏÁö ¾Ê´Â jarµµ Æ÷ÇԵǾî ÀÖÀ» ¼ö ÀÖÀ¸´Ï Ãë»ç ¼±ÅÃÇؼ­ »ç¿ëÇϱ⠹ٶõ´Ù.

´ÙÀ½Àº »ó±â ¼Ò½º°¡ ½ÇÇàµÇ¸é¼­ Àü¼ÛÇÑ ¹®ÀÚ¿­°ú ÆÄÀϵéÀ» ¼ö½ÅÇÏ´Â ¼­¹ö´Ü jspÀÇ ¼Ò½º ÄÚµåÀÌ´Ù.

<%@ page contentType="text/html;charset=windows-1252"%>
<%@ page import="org.apache.commons.fileupload.DiskFileUpload"%>
<%@ page import="org.apache.commons.fileupload.FileItem"%>

<%@ page import="java.util.List"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.io.File"%>
<%@ page import="java.net.URLDecoder"%>
<%
        System.out.println("Content Type =" + request.getContentType());
 
        String revFilePath = "C:/egov_dev/testdata/receiver";
        DiskFileUpload dfu = new DiskFileUpload();


        //µ¿½Ã¿¡ ¿Ã¸± ¼ö Àִ ÃÖ´ë »çÀ̵带 ¼³Á¤ÇÑ´Ù. ¼³Á¤µÈ »çÀÌÁî ÀÌ»óÀÇ ÆÄÀÏÀÌ ¼ö½ÅµÇ¸é

        // FileUploadExceptionÀÌ ¹ß»ýÇÑ´Ù.
        dfu.setSizeMax(20000000); 
 
        List fileItems = dfu.parseRequest(request);
        Iterator itr = fileItems.iterator();
        while(itr.hasNext()) {
             FileItem fileItem = (FileItem)itr.next();
 
             //Check if not form field so as to only handle the file inputs
             //else condition handles the submit button input
             if(!fileItem.isFormField()) { //ÆÄÀÏÀÎ °æ¿ì
                    String fileNm  = URLDecoder.decode(fileItem.getName(), "UTF-8"); //Çѱ۠ÆÄÀϸí ó¸®!
                    /*test*/System.out.println("fileName: "+ fileNm );
                    /*test*/System.out.println("fileSize: "+ fileItem.getSize());

                    File file= new File(revFilePath, fileNm);
                    /*test*/System.out.println(file.getAbsolutePath());
                    fileItem.write(file);
            }else { //¹®ÀÚ¿­ÀÎ °æ¿ì
                    /*test*/System.out.println("Field: "+ fileItem.getFieldName() + ", content: " + fileItem.getString());
            }
        }
%>
Upload Successful!!

 

 

À§ Äڵ带 ½ÇÇàÇÏ·Á¸é WAS¿¡ commons-fileupload-1.3.1.jar ÆÄÀÏÀÌ Á¸ÀçÇØ¾ß ÇÑ´Ù.(WEB-INF/lib Æú´õ¿¡ ÀúÀå)