使用java上传文件MultipartEntityBuilder会抛出内容太长时间。还有什么选择?

时间:2017-08-22 08:51:23

标签: java rest httpclient

我正在尝试制作一个可以在两台服务器之间同步数据的小工具。大多数调用都使用JSON进行REST调用,因此我决定使用Apache HttpClient。 但是我需要上传一个文件。我正在尝试使用mutipart表单数据与MutipartEntityBuilder这样做,但我遇到内容太长的问题。 (我试图gzip文件的内容,但我仍然超过限制)。

这是我的java代码:

        HttpPost request = new HttpPost(baseUrl+URL);
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();

        //create upload file params
        builder.addTextBody("scanName", "Test upload");
        builder.addBinaryBody("myfile", f);

        HttpEntity params= builder.build();

        request.setEntity(params);

        request.addHeader("content-type","multipart/form-data");

        HttpResponse response = httpClient.execute(request);

我应该在文件上传部分使用更好的atlernative吗?我也打算从服务器之一下载文件。在尝试处理这些回复时,我会遇到类似的问题吗?

我有什么问题吗?

1 个答案:

答案 0 :(得分:1)

我尝试使用你的代码并发送一些大小约为33MB的文件并且它成功了。所以,我认为您的问题如下:

  1. 创建的http客户端对请求大小有限制 - 在这种情况下,您需要更改客户端的属性或使用其他客户端;

  2. 在某些代码中,您可以调用HttpEntity.getContent()方法。对于此方法的多部分请求存在限制 - 25kB。在这种情况下,您需要使用writeTo(OutputStream)代替getContent()

  3. 在评论中你说过招摇,但我不明白这是什么意思。如果你使用swagger生成的api,问题可能发生在他们的代码中,你需要修复生成逻辑(或类似的东西 - 我从来没用过招摇)

    我希望我的回答能帮到你