java - MultipartEntityBuilder 将 Content-Disposition header 添加到二进制文件并破坏它

标签 java rest multipartform-data

我有一个 Java 代码片段,它通过网络将二进制文件发送到 REST 客户端,不幸的是,对二进制文件进行编码的 multipartEntityBuilder 添加了一些损坏文件的 header ,例如它添加了一个 Content-Disposition ,它不是存在于原始文件中。

我该如何解决这个问题?

CloseableHttpClient httpclient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(getRemoteUrlString() + "/webresources/file/upload");
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
multipartEntityBuilder.setMode(HttpMultipartMode.STRICT);
multipartEntityBuilder.setBoundary("custyom-mimetype-boundary");
multipartEntityBuilder.addPart("fileName", (StringBody) valuesList.get(0));
multipartEntityBuilder.addPart("file", (FileBody) valuesList.get(1));
httpPost.setEntity(multipartEntityBuilder.build());
httpPost.setEntity(multipartEntityBuilder.build());
HttpResponse response = null;
try
    {
       response = httpclient.execute(httpPost);
    }
catch (IOException ex)
    {     
            }

最佳答案

我找到的唯一解决方案是将 header 留在发送端并修改接收端,显然,如果您不先读取 header 并丢弃它们,readBodyData 函数也会读取 header 。

//We read uselessHeaders otherwise readBodyData includes them and corrupts some files
String uselessHeaders = multipartStream.readHeaders();
multipartStream.readBodyData(byteArrayOutputStream);

关于java - MultipartEntityBuilder 将 Content-Disposition header 添加到二进制文件并破坏它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26847918/

相关文章:

java - 来自 JSP 表单的输入 TYPE TEXT 值(enctype ="multipart/form-data")返回 null

javascript - multipart/form-data 请求的文件部分的内容类型被客户端设置错误

java - com.sun.mail.smtp.SMTPSendFailedException : 553 Sorry, 您的信封发件人在我的死信列表中

java - 单元测试、集成测试还是设计中的问题?

Java:java.lang.NumberFormatException

java - 使用 Grizzly 作为 Web 服务引擎

spring - 如何使用 HibernateValidator 验证 MultipartFile?

java - 不要在字符串中转义双引号

java - 是否有更好的方法在 Controller 级别处理 POST 请求?

rest - 网络 API/REST : Request list of items