转载: https://blog.csdn.net/lsqingfeng/article/details/90611686
我这里的需求主要是因为https页面要访问http,不能直接访问,暂时加一层的方法访问.
上传文件先请求https,然后在https的后台访问http
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.3</version> </dependency>
/** * 使用httpclint 发送文件 * @param url: 接口全路径 * @param file: 上传文件 * @param fileParamName: 接口对应文件的参数名:相当于@RequestParam("fileParamName") * @param headerParams: 请求头信息: 可能需要携带token,注意不要设置content-type * @param otherParams: 其他参数 * @return */ public static String uploadApiFile(String url ,MultipartFile file,String fileParamName,Map<String,String>headerParams,Map<String,String>otherParams) { CloseableHttpClient httpClient = HttpClients.createDefault(); String result = ""; try { String fileName = file.getOriginalFilename(); HttpPost httpPost = new HttpPost(url); //添加header for (Map.Entry<String, String> e : headerParams.entrySet()) { httpPost.addHeader(e.getKey(), e.getValue()); } MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setCharset(Charset.forName("utf-8")); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//加上此行代码解决返回中文乱码问题 builder.addBinaryBody(fileParamName, file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流 for (Map.Entry<String, String> e : otherParams.entrySet()) { builder.addTextBody(e.getKey(), e.getValue());// 类似浏览器表单提交,对应input的name和value } 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")); } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; }
如果有大佬知道js 直接https网页访问http上传文件的方式! 还望指点一二
原文:https://www.cnblogs.com/yxgmagic/p/11766149.html