利用HttpClient以post形式上傳文件


利用HttpClient以post形式上傳文件

/**
 * created since 2012-4-6
 */
package com.yonge.http;

import java.io.File;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
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;

/**
 * @author wb-gaoy
 * @version $Id: HttpClientTest.java,v 0.1 2012-4-6 下午1:38:53 wb-gaoy Exp $
 */
public class HttpClientUploadFileTest {

    public void uploadFile(File file, String url) {
        if (!file.exists()) {
            return;
        }
        PostMethod postMethod = new PostMethod(url);
        try {
            //FilePart:用來上傳文件的類
        FilePart fp = new FilePart("filedata", file);
            Part[] parts = { fp };

            //對於MIME類型的請求,httpclient建議全用MulitPartRequestEntity進行包裝
            MultipartRequestEntity mre = new MultipartRequestEntity(parts, postMethod.getParams());
            postMethod.setRequestEntity(mre);
            HttpClient client = new HttpClient();
            client.getHttpConnectionManager().getParams().setConnectionTimeout(50000);// 設置連接時間
            int status = client.executeMethod(postMethod);
            if (status == HttpStatus.SC_OK) {
                System.out.println(postMethod.getResponseBodyAsString());
            } else {
                System.out.println("fail");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //釋放連接
            postMethod.releaseConnection();
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        HttpClientUploadFileTest test = new HttpClientUploadFileTest();
        test.uploadFile(new File("e:/default.css"),
            "http://ecmng.local.sit.alipay.net/receiveDevZipFile.json?summary=1010100");
    }

}

 

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

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.MultipartPostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.http.entity.mime.content.ContentBody;
import org.json.JSONArray;
import org.json.JSONObject;

public class test5 {

  public static void main(String[] args) throws Exception {
    MultipartPostMethod filePost = new MultipartPostMethod("http://XXX.XXX.XXX.XXX:8088/XXX");
    FilePart cbFile = new FilePart("upload", new File("D:/test123.jpg"));
    cbFile.setContentType("image/*");
    filePost.addParameter("cmd_no", "2");
    //filePost.addParameter("upload", new File("D:/a.png"));
    filePost.addPart(cbFile);
    filePost.addParameter("pagesize","10");
    filePost.addParameter("pageno","1");
    HttpClient client = new HttpClient();
    // 由於要上傳的文件可能比較大 , 因此在此設置最大的連接超時時間
    //client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
    int statusInt = client.executeMethod(filePost);
    System.out.println(statusInt);
  }
}

 模擬端:

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

/**
 * 
 * @author <a href="mailto:just_szl@hotmail.com"> Geray</a>
 * @version 1.0,2012-6-12 
 */
public class HttpPostArgumentTest2 {

    //file1與file2在同一個文件夾下 filepath是該文件夾指定的路徑    
    public void SubmitPost(String url,String filename1,String filename2, String filepath){
        
        HttpClient httpclient = new DefaultHttpClient();
        
        try {
    
            HttpPost httppost = new HttpPost(url);
            
            FileBody bin = new FileBody(new File(filepath + File.separator + filename1));
              
            FileBody bin2 = new FileBody(new File(filepath + File.separator + filename2));
            
            StringBody comment = new StringBody(filename1);

            MultipartEntity reqEntity = new MultipartEntity();
            
            reqEntity.addPart("file1", bin);//file1為請求后台的File upload;屬性    
             reqEntity.addPart("file2", bin2);//file2為請求后台的File upload;屬性
             reqEntity.addPart("filename1", comment);//filename1為請求后台的普通參數;屬性    
            httppost.setEntity(reqEntity);
            
            HttpResponse response = httpclient.execute(httppost);
            
                
            int statusCode = response.getStatusLine().getStatusCode();
            
                
            if(statusCode == HttpStatus.SC_OK){
                    
                System.out.println("服務器正常響應.....");
                
                HttpEntity resEntity = response.getEntity();
                
                
                System.out.println(EntityUtils.toString(resEntity));//httpclient自帶的工具類讀取返回數據
                
                
                
                System.out.println(resEntity.getContent());   

                EntityUtils.consume(resEntity);
            }
                
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                try { 
                    httpclient.getConnectionManager().shutdown(); 
                } catch (Exception ignore) {
                    
                }
            }
        }
    
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        HttpPostArgumentTest2 httpPostArgumentTest2 = new HttpPostArgumentTest2();
        
        httpPostArgumentTest2.SubmitPost("http://127.0.0.1:8080/demo/receiveData.do",
                "test.xml","test.zip","D://test");
    }
    
}

服務器:

public void receiveData(HttpServletRequest request, HttpServletResponse response) throws AppException{

        PrintWriter out = null;
        response.setContentType("text/html;charset=UTF-8");
        
        Map map = new HashMap();
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        File directory = null;  
        List<FileItem> items = new ArrayList();
        try {
            items = upload.parseRequest(request);
            // 得到所有的文件
            Iterator<FileItem> it = items.iterator();
            while (it.hasNext()) {
                FileItem fItem = (FileItem) it.next();
                String fName = "";
                Object fValue = null;
                if (fItem.isFormField()) { // 普通文本框的值
                    fName = fItem.getFieldName();
//                    fValue = fItem.getString();
                    fValue = fItem.getString("UTF-8");
                    map.put(fName, fValue);
                } else { // 獲取上傳文件的值
                    fName = fItem.getFieldName();
                    fValue = fItem.getInputStream();
                    map.put(fName, fValue);
                    String name = fItem.getName();
                    if(name != null && !("".equals(name))) {
                        name = name.substring(name.lastIndexOf(File.separator) + 1);
                        
//                        String stamp = StringUtils.getFormattedCurrDateNumberString();
                        String timestamp_Str = TimeUtils.getCurrYearYYYY();
                        directory = new File("d://test");  
                                directory.mkdirs();
                        
                        String filePath = ("d://test")+ timestamp_Str+ File.separator + name;
                        map.put(fName + "FilePath", filePath);
                        
                        InputStream is = fItem.getInputStream();
                        FileOutputStream fos = new FileOutputStream(filePath);
                        byte[] buffer = new byte[1024];
                        while (is.read(buffer) > 0) {
                            fos.write(buffer, 0, buffer.length);
                        }
                        fos.flush();
                        fos.close();
                        map.put(fName + "FileName", name);
                    }
                }
            }
        } catch (Exception e) {
            System.out.println("讀取http請求屬性值出錯!");
//            e.printStackTrace();
            logger.error("讀取http請求屬性值出錯");
        }
        
        // 數據處理
        
        
        
        
        try {
            out = response.getWriter();
            out.print("{success:true, msg:'接收成功'}");
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM