上传时文件已损坏

时间:2015-03-27 15:28:09

标签: java servlets

我是通过java中的multipartEntityBuilder上传文件的。 文件上传但被破坏,因为内容标题与文件中的数据混合在一起。

文本和图片格式的错误在pdf中正常工作。

HttpClient httpclient =new HttpClient();
HttpPut post = new HttpPut(uploadfileurl);
File file = new File(fileUrl);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();         
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("upfile", file, ContentType.DEFAULT_BINARY, "test.txt");

builder.addTextBody("text", message, ContentType.TEXT_PLAIN);
HttpEntity entity = builder.build();
post.setEntity(entity);
post.setHeader("enctype", "multipart/form-data");
HttpResponse httpresponse =  httpclient.execute(post);
HttpEntity resEntity = httpresponse.getEntity();

文件错误:: 这应该是这样的:

此文件用于测试

但它会是这样的:

--------------- 1427465571114 内容处理:表格数据; NAME = “upfile”;文件名=“” Content-Type:application / octet-stream

此文件用于测试

--------------- 1427465571114 -

2 个答案:

答案 0 :(得分:2)

好吧,实际上它并没有被破坏。这是正确的http post请求。 如果你想获得文件的内容,你试过这个方法吗

httpresponse.getEntity().getContent()

它将返回InputStream对象,您可以在其中尝试阅读内容。

答案 1 :(得分:0)

(BTW我正在使用Zip4J,如果有人想知道我的zip.getFile()调用)

顾名思义:传递多部分请求。

以下是为2个文件构建多部分标头的代码片段:

MultipartEntityBuilder mpeBuilder = MultipartEntityBuilder.create();
        mpeBuilder.addBinaryBody(zip.getFile().getName(), zip.getFile());
        mpeBuilder.addBinaryBody(zip.getFile().getName(), zip.getFile());

        post.setEntity(mpeBuilder.build());

然后我可以在我的服务器上找到包含以下内容的文件:

 --d_sc7jYe4LHAMikc1LbDw59Yz3pz_bn
Content-Disposition: form-data; name="temp.zip"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

BINARY GARBAGE
--d_sc7jYe4LHAMikc1LbDw59Yz3pz_bn
Content-Disposition: form-data; name="temp.zip"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

BINARY GARBAGE
--d_sc7jYe4LHAMikc1LbDw59Yz3pz_bn--

您可以想象这些标题和分隔符是为了分隔和标识数据。

所以,我想说这不是垃圾,你需要在服务器端处理这个问题,比如你想要以正确的方式保存2个文件。

如果您只想上传文件,则文档建议使用fileEntity:

 post.setEntity(new FileEntity(zip.getFile()));

通过使用此实体,我的zip文件被发送到服务器而没有任何"损坏"

https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html