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(); }
相关文章推荐
- java中使用scoket模拟http post请求发送图片或文件
- 转 Android HttpClient post MultipartEntity - Android 上传文件
- Android下通过httpClient发送GET和POST请求的实例代码
- httpClient post发送json数据
- Java客户端通过Http发送POST请求上传文件到web服务器
- 通过http/https的POST方式,发送和接受XML文件内容
- Java用HttpClient3发送Get和Post请求(增强)
- AsyncHttpClient POST上传文件
- HttpClient发送get请求,post请求,携带cookie访问,json提交
- HttpClient 向tomcat服务器发送文件
- java实现httpclient发送post请求
- httpclient通过POST来上传文件,而不是通过流的形式,并在服务端进行解析(通过httpmime.jar来操作)
- HttpClient发送http请求以及上传文件
- HttpClient通过Post上传多个文件
- HttpClient发送Get、Post请求简单实践
- [随记] 使用httpClient发送post请求连接restful接口
- java apache commons HttpClient发送get和post请求的学习整理
- 同步和异步Httpclient通过get和post方式发送请求
- java 利用httpclient 3.1 和 httpclient4.1.2发送post请求
- Java客户端通过Http发送POST请求上传文件到web服务器