zoukankan      html  css  js  c++  java
  • HttpClient中转上传文件

    https://www.cnblogs.com/lyxy/p/5629151.html

    ******************************************************

    场景:客户端(浏览器)A---->选择文件上传---->服务器B---->中转文件---->服务器C---->返回结果---->服务器B---->客户端A

    有时候在项目中需要把上传的文件中转到第三方服务器,第三方服务器提供一个接收文件的接口。

    而我们又不想把文件先上传到服务器保存后再通过File来读取文件上传到第三方服务器,我们可以使用HttpClient来实现。

    因为项目使用的是Spring+Mybatis框架,文件的上传采用的是MultipartFile,而FileBody只支持File。

    所以这里采用MultipartEntityBuilder的addBinaryBody方法以数据流的形式上传。

    这里需要引入两个jar包:httpclient-4.4.jar和httpmime-4.4.jar

    Maven pom.xml引入

    复制代码
    
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.4</version>
        </dependency>

    上传代码:

        /**
         * 中转文件
         * 
         * @param file
         *            上传的文件
         * @return 响应结果
         */
        public String httpClientUploadFile(MultipartFile file) {
            final String remote_url = "http://192.168.1.99:8080/demo/file/upload";// 第三方服务器请求地址
            CloseableHttpClient httpClient = HttpClients.createDefault();
            String result = "";
            try {
                String fileName = file.getOriginalFilename();
                HttpPost httpPost = new HttpPost(remote_url);
                MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
                builder.addTextBody("filename", fileName);// 类似浏览器表单提交,对应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;
        }
  • 相关阅读:
    dubbo踩坑
    windows下面使用protobuf
    解决端口占用的问题
    建设检验
    统计学资料整理
    java cpu 负载高分析
    演讲/汇报
    管理和领导
    css渐变动画
    vue组件之间互相传值:父传子,子传父
  • 原文地址:https://www.cnblogs.com/zhao1949/p/9628839.html
Copyright © 2011-2022 走看看