HttpClient中转上传文件

来源:互联网 发布:淘宝下架软件 编辑:程序博客网 时间:2024/05/16 15:56

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

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

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

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

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

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


/**     * 中转文件     *      * @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;    }


原创粉丝点击