httpclient 上傳附件實例

httpclient 上傳附件實例java

    /**
     * 上傳附件
     * @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);
            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();
		        }
        }
    } 

 調用方法web

    /**
       * @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)ui

MultipartEntityBuilder用法this

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

修飾符和類型url

方法和描述spa

MultipartEntityBuilder.net

addBinaryBody(String name, byte[] b) orm

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

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() 

相關文章
相關標籤/搜索