httpclient 上傳附件實例


httpclient 單附件上傳實例  (擴展多附件上傳實例,點我) 

    /**
     * 上傳附件
     * @param host
     * @param uri
     * @param filePath  文件路徑
     * @param name  服務端定義的附件名
     * @param param  請求帶的參數
     * @return
     */
    public String upload(String host, String uri, String filePath,String name, Map<String, String> param) {
        logger.info("*****************request*****************");
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        String url = host + uri ;
        String rst = "";
        try {
            httpClient = HttpClients.createDefault();
            logger.info("請求路徑: "+ url);
            HttpPost httpPost = new HttpPost(url);
             //通過當前類的加載器來加載資源,調用getResourceAsStream()是保證和類類型同一個加載器加載
            InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(filePath);  //獲取resources下的資源文件
            File file = new File(filePath);
            MultipartEntityBuilder builder = MultipartEntityBuilder.create(); //創建MultipartEntityBuilder對象
        //添加上傳的二進制文件
            builder.addBinaryBody(name, inputStream, ContentType.create("multipart/form-data",Consts.UTF_8), file.getName());  
            for (Map.Entry<String, String> entry : param.entrySet()) {
		        String key = entry.getKey();
		        String value = entry.getValue();
		        StringBody stringBody = new StringBody(value, create("text/plain", Consts.UTF_8)); //解決中文亂碼問題
               //添加請求入參
		        builder.addPart(key, stringBody);
		        logger.info("請求參數:"+key+":"+ value);
            }
            HttpEntity reqEntity = builder.build();
            httpPost.setEntity(reqEntity);
              // 發起請求 並返回請求的響應
            response = httpClient.execute(httpPost);
               // 獲取響應對象
            HttpEntity resEntity = response.getEntity();
            if (resEntity != null) {
		          // 打印響應內容
                rst = EntityUtils.toString(resEntity, Charset.forName("UTF-8")) ;
                logger.info("*****************response*****************");
                logger.info("響應結果: " +rst);
            }
             // 銷毀
            EntityUtils.consume(resEntity);
            return rst;
        } catch (Exception e) {
            logger.info("出錯啦: "+e.getMessage());
            e.printStackTrace();
            return "出錯了";
        } finally {
            try {
		    if (response != null) {
		        response.close();
	        }
            } catch (IOException e) {
		        e.printStackTrace();
            }
		    try {
		    if (httpClient != null) {
                httpClient.close();
		    }
		    } catch (IOException e) {
		        e.printStackTrace();
		        }
        }
    } 

 調用方法

    /**
       * @description: TODO 上傳圖片
       * @author : xxx
       * @date 2019/6/6 11:15
       */
    public String uploadImage() throws Exception {
        Map<String, String> params  = new HashMap<>();
        params.put("uploadType","1");
	  //文件放置resources目錄下, 服務端定義接收附件名稱為 imageFile
        String rst = upload("http://xxxx.com","/web/upload","picture/repaymentPic.jpg","imageFile",params);
        return rst;
    }

  

請求類型表:查看

基本步驟:

1.設置上傳的模式;
  setMode(HttpMultipartMode mode),其中mode主要有BROWSER_COMPATIBLE,RFC6532,STRICT三種,默認值是STRICT。
2.創建MultipartEntityBuilder對象,並添加需要上傳的數據;
 a.利用MultipartEntityBuilder.create()來創建對象;
 b.addBinaryBody:以二進制的形式添加數據,可以添加File、InputStream、byte[]類型的數據。
  addBinaryBody(String name, File file, ContentType contentType, String filename)
  addBinaryBody(String name, InputStream stream, ContentType contentType, String filename)
  addBinaryBody(String name, byte[] b, ContentType contentType, String filename)
 c.addTextBody:添加文本數據
  addTextBody(String name, String text, ContentType contentType)
 d.addPart:以Key/Value的形式添加ContentBody類型的數據
  addPart(String name, ContentBody contentBody)

MultipartEntityBuilder用法

2.MultipartEntityBuilder這個類主要用於創建HttpEntity。它的主要方法有:

修飾符和類型

方法和描述

MultipartEntityBuilder

addBinaryBody(String name, byte[] b) 

將字節數組以二進制的形式添加數據。

MultipartEntityBuilder

addBinaryBody(String name, byte[] b, ContentType contentType, String filename) 

將字節數組以二進制的形式添加數據。

MultipartEntityBuilder

addBinaryBody(String name, File file) 

將文件以二進制的形式添加數據。

MultipartEntityBuilder

addBinaryBody(String name, File file, ContentType contentType, String filename) 

將文件以二進制的形式添加數據。

MultipartEntityBuilder

addBinaryBody(String name, InputStream stream) 

MultipartEntityBuilder

addBinaryBody(String name, InputStream stream, ContentType contentType, String filename) 

將輸入流以二進制的形式添加數據。

MultipartEntityBuilder

addPart(String name, ContentBody contentBody) 

添加ContentBody 類型的數據。

MultipartEntityBuilder

addTextBody(String name, String text) 

添加文本數據。

MultipartEntityBuilder

addTextBody(String name, String text, ContentType contentType) 

以指定的內容類型添加文本數據。

HttpEntity

build() 

創建一個HttpEntity。

static MultipartEntityBuilder

create() 

創建一個MultipartEntityBuilder對象。

MultipartEntityBuilder

setBoundary(String boundary) 

設置邊界。

MultipartEntityBuilder

setCharset(Charset charset) 

設置請求的編碼格式。

MultipartEntityBuilder

setLaxMode() 

MultipartEntityBuilder

setMode(HttpMultipartMode mode) 

設置模式。

MultipartEntityBuilder

setStrictMode() 


免責聲明!

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



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