java http 上传文件_java利用httpClient实现后台文件上传请求
之前寫過基于html和js的文件上傳方法java 用springMVC 和HttpServletRequest 兩種實現(xiàn)文件上傳的方法和httpClient后臺執(zhí)行普通post請求的文章java通過httpClient從接口請求數(shù)據(jù)入庫以及自動生成實體工具類,最近接到一個需求,需要用到后臺去調(diào)用遠(yuǎn)程服務(wù)器的文件上傳接口實現(xiàn)文件上傳,用到了httpClient的MultipartEntityBuilder實現(xiàn)。
maven引入httpClient依賴
org.apache.httpcomponents
httpcore
4.4.13
org.apache.httpcomponents
httpclient
4.5.12
org.apache.httpcomponents
httpmime
4.5.12
以上依賴是筆者成文時maven最新的依賴包。
新建一個UploadFileUtil工具類:
package com.zhaohy.app.utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UpLoadFileUtil {
private static Logger logger = LoggerFactory.getLogger(UpLoadFileUtil.class);
/**
* 通過httpClient上傳文件
* @param fileName
* @param path
* @return 外部域名的下載url
*/
public static String UploadFileByHttpClient(String fileName,String path, String url) {
String result = "";
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
HttpPost httpPost = new HttpPost(url);
//HttpMultipartMode.RFC6532參數(shù)的設(shè)定是為避免文件名為中文時亂碼
MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);
httpPost.addHeader("header1", "111");//頭部放文件上傳的head可自定義
File file = new File(path+fileName); //上傳文件的路徑
builder.addBinaryBody("file", file, ContentType.MULTIPART_FORM_DATA, fileName);
builder.addTextBody("params1", "1");//其余參數(shù),可自定義
builder.addTextBody("params2", "2");
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);// 執(zhí)行提交
HttpEntity responseEntity = response.getEntity();//接收調(diào)用外部接口返回的內(nèi)容
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
// 返回的內(nèi)容都在content中
InputStream content = responseEntity.getContent();
// 定義BufferedReader輸入流來讀取URL的響應(yīng)
BufferedReader in = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
if(!AppFrameworkUtil.isBlank(result)) {
logger.info("上傳文件"+fileName+"返回參數(shù)==>"+result);
}else {
logger.error("上傳文件失敗:返回result為null");
}
}
}catch(Exception e) {
logger.error("上傳文件失敗:",e);
}finally {//處理結(jié)束后關(guān)閉httpclient的鏈接
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
}
上面代碼中 fileName是文件名稱,本地文件路徑,url是遠(yuǎn)程上傳接口url,通過httpPost.addHeader來自定義header參數(shù),builder.addTextBody來自定義其他參數(shù),相當(dāng)于html中form表單中其他的參數(shù),可解析返回來的result拿到自己想拿的信息。
總結(jié)
以上是生活随笔為你收集整理的java http 上传文件_java利用httpClient实现后台文件上传请求的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server 批量更新字段值为R
- 下一篇: mp4v2 写mp4 java_使用mp