zoukankan      html  css  js  c++  java
  • java 后台请求其他接口转发文件

    转载: 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
Copyright © 2011-2022 走看看