您的位置:首页 > 理论基础 > 计算机网络

HttpClient post发送文件

2018-01-29 10:54 531 查看
客户端

/**
* 发送文件对象到服务端
* @param file
* @param url
* @param params
* @param charset
* @param connectTimeout
* @param socketTimeout
* @return
*/
public static String postFile( File file,String url, Map<String, String> params, String charset, int connectTimeout, int socketTimeout) {

if (StringUtils.isBlank(url)) {
return null;
}
CloseableHttpClient httpclient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String result = null;
try {
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(soTimeout).setConnectTimeout(connectTimeout).setConnectionRequestTimeout(connectTimeout).build();
if (params != null && !params.isEmpty()) {
List<NameValuePair> pairs = new ArrayList<NameValuePair>(params.size());
for (Map.Entry<String, String> entry : params.entrySet()) {
String value = entry.getValue();
if (value != null) {
pairs.add(new BasicNameValuePair(entry.getKey(), value));
}
}
url += "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairs, charset));
}
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(requestConfig);
//将java.io.File对象添加到HttpEntity(org.apache.http.HttpEntity)对象中
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
//解决上传文件,文件名中文乱码问题
builder.setCharset(Charset.forName("utf-8"));
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//设置浏览器兼容模式
// builder.addBinaryBody("uploadFile", file, ContentType.create("multipart/form-data"), "file");
builder.addPart("file", new FileBody(file));
httpPost.setEntity(builder.build());
response = httpclient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity resEntity = response.getEntity();
result =EntityUtils.toString(resEntity);
// 消耗掉response
EntityUtils.consume(resEntity);
}
} catch (Exception e) {
e.printStackTrace();
}

return result;
}


服务端

@RequestMapping(value = "/file",method = RequestMethod.POST)
public  Map<String, Object> fileUpload(
@RequestParam(value = "access_token",required = true) String access_token,
HttpServletRequest request) throws IOException {
//将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(request.getSession().getServletContext());
//判断是否多文件上传
if(multipartResolver.isMultipart(request)){
//将request变成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
Map<String, String[]> map=multiRequest.getParameterMap();
//获取multiRequest 中所有的文件名
Iterator<String> iter=multiRequest.getFileNames();
//遍历所有文件
FileInputStream in=null;
FileOutputStream os=null;
try {
while(iter.hasNext()){
MultipartFile multipartFile=multiRequest.getFile(iter.next());
System.out.println("fileName---------->" +multipartFile.getOriginalFilename());
int pre = (int) System.currentTimeMillis();
if (multipartFile != null) {
// 取得当前上传文件的文件名称
String fileName=multipartFile.getOriginalFilename();
// String s = encodeFilename(fileName, request);
//拿到上传文件的输入流
in = (FileInputStream) multipartFile.getInputStream();
//拿到输出流,同时重命名上传的文件
String path=System.getProperty("user.dir") + File.separator+"upload";
//判断文件夹是否存在
mkdirs(path);
File file=new File(path+File.separator+System.currentTimeMillis() + fileName);

os = new FileOutputStream(file);
//以写字节的方式写文件
int b = 0;
while((b=in.read()) != -1){
os.write(b);
}
os.flush();
in.close();
os.close();
int finaltime = (int) System.currentTimeMillis();
System.out.println(finaltime - pre);
// if (fileName.trim() != null && fileName.trim().length() > 0) {
//
//     CommonsMultipartFile cf = (CommonsMultipartFile) multipartFile;
//     DiskFileItem fi = (DiskFileItem) cf.getFileItem();
//     File tempFile = fi.getStoreLocation();
//     // 拿到文件,存储
// }
}
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("上传出错");
}finally {
if(null!=in){
in.close();
}
if(null!=os){
os.close();
}
}
}

retMap.put("code", 1);
Map<String, Object> bodyMap = new HashMap<>();
bodyMap.put("fieldId",new Date().getTime()+"");
retMap.put("body", bodyMap);
retMap.put("message", "成功");
System.out.println("fileUpload");
return retMap;
}


/**
* 创建文件存储目录
*
* @return
*/
<
afea
span class="hljs-keyword">public static String mkdirs(String dir) {

StringBuilder sb = new StringBuilder();
sb.append(dir);
File f = new File(sb.toString());
if (!f.exists()) {
f.mkdirs();
}
return sb.toString();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  httpclient