HttpClient中轉上傳文件

原文:http://www.javashuo.com/article/p-dvcxphcr-ds.htmlhtml

場景:客戶端(瀏覽器)A---->選擇文件上傳---->服務器B---->中轉文件---->服務器C---->返回結果---->服務器B---->客戶端A前端

有時候在項目中須要把上傳的文件中轉到第三方服務器,第三方服務器提供一個接收文件的接口。java

而咱們又不想把文件先上傳到服務器保存後再經過File來讀取文件上傳到第三方服務器,咱們可使用HttpClient來實現。apache

由於項目使用的是Spring+Mybatis框架,文件的上傳採用的是MultipartFile,而FileBody只支持File。api

因此這裏採用MultipartEntityBuilder的addBinaryBody方法以數據流的形式上傳。瀏覽器

這裏須要引入兩個jar包:httpclient-4.4.jar和httpmime-4.4.jar服務器

Maven pom.xml引入框架

複製代碼
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
        <version>4.4</version>
    </dependency>
複製代碼

上傳代碼:ui

Map<String, String> map = new HashMap<>();
CloseableHttpClient httpClient = HttpClients.createDefault();
String result = "";
try {
    String fileName = file.getOriginalFilename();            // 路徑自定義
    HttpPost httpPost = new HttpPost("http://192.168.xxx.xx:xxxx/api/**");            //此處能夠設置請求頭           //httpPost.setHeader("Authrization",「自定義的token」)
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    // 文件流
    builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);
    // 相似瀏覽器表單提交,對應input的name和value
    builder.addTextBody("filename", fileName);
    HttpEntity entity = builder.build();
    httpPost.setEntity(entity);
    // 執行提交
    HttpResponse response = httpClient.execute(httpPost);
    HttpEntity responseEntity = response.getEntity();
    if (responseEntity != null) {
        // 將響應內容轉換爲字符串
        result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
        // 將響應內容轉換成Map,JSON依賴爲fastJson
        Map resultMap= JSON.parseObject(result, Map.class);                        // 封裝數據返回給前端                 map.put("key",resultMap.get("field"));
    }
} catch (Exception e) {
   e.printStackTrace();
} finally {
    try {
        httpClient.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}   
相關文章
相關標籤/搜索