HttpClients发送带文件的post请求

使用HttpClients发送带文件的post请求网上代码不少,我主要是遇到了一个无法接收到请求的问题。后来试了很多方法发现是RequestBody这个注解的问题,去掉这个注解就好了。这么简单的问题,有时候就是容易忽略,特意记一下吧。
顺便贴一下我的发送请求的代码吧。

File file = new File(fullPath);
FileInputStream fileInputStream = new FileInputStream(file);
MultipartFile multipartFile = new MockMultipartFile(file.getName(),file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(),fileInputStream);

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(FilePushSet.PUSHURL.getMsg());
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000)
                .setConnectionRequestTimeout(10000).build();
httpPost.setConfig(requestConfig);
try {
     MultipartEntityBuilder builder = MultipartEntityBuilder.create();
     builder.setCharset(StandardCharsets.UTF_8);
     builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
     String fileName = multipartFile.getOriginalFilename();
            // 文件流
     builder.addBinaryBody("file", multipartFile.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);
            //表单中其他参数,如果没有其他参数可以注释该部分
      builder.addPart("md5",new StringBody(FilePushSet.MD5.getMsg(), 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(), StandardCharsets.UTF_8);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (httpClient != null) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

因为一开始想的是需要转换成MultipartFile,其实不转换,在builder.addBinaryBody这里直接使用文件输入流也是可以的,但是懒得再去改了。

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

chedanquestion

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值