赞
踩
目前在做一个JavaWeb的开发工作,涉及到前端页面上传文件,JavaWeb作为中间层,将数据转发给下一级服务。
刚开始看到网上有人用RestTemplate 发送Http请求,我也试着一下,但发现不行,经过摸索请求方法如下:
/** * 以post方式调用第三方接口,以form-data 形式 发送 MultipartFile 文件数据 * * @param url post请求url * @param fileParamName 文件参数名称 * @param multipartFile 文件 * @param paramMap 表单里其他参数 * @return */ public static String doPostFormData(String url, String fileParamName, MultipartFile multipartFile, Map<String, String> paramMap) { // 创建Http实例 CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建HttpPost实例 HttpPost httpPost = new HttpPost(url); // 请求参数配置 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000) .setConnectionRequestTimeout(10000).build(); httpPost.setConfig(requestConfig); try { MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setCharset(java.nio.charset.Charset.forName("UTF-8")); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); String fileName = multipartFile.getOriginalFilename(); // 文件流 builder.addBinaryBody(fileParamName, multipartFile.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName); //表单中其他参数 for(Map.Entry<String, String> entry: paramMap.entrySet()) { builder.addPart(entry.getKey(),new StringBody(entry.getValue(), ContentType.create("text/plain", Consts.UTF_8))); } HttpEntity entity = builder.build(); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost);// 执行提交 if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 返回 String res = EntityUtils.toString(response.getEntity(), java.nio.charset.Charset.forName("UTF-8")); return res; } } catch (Exception e) { e.printStackTrace(); logger.error("调用HttpPost失败!" + e.toString()); } finally { if (httpClient != null) { try { httpClient.close(); } catch (IOException e) { logger.error("关闭HttpPost连接失败!"); } } } return null; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。