上传期间文件大小增加

时间:2013-01-16 09:44:03

标签: java http httpclient openstack-swift

我使用httpclient上传文件。上传文件大小后更改。在文件上传期间,一些额外的东西会被添加到文件中。

在上传文件之前,它包含:

hi this is vipin check

上传文件后包含:

--j9q7PmvnWSP9wKHHp2w_KCI4Q2jCniJvPbrE0
Content-Disposition: form-data; name="vipin.txt"; filename="vipin.txt"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

hi this is vipin check
--j9q7PmvnWSP9wKHHp2w_KCI4Q2jCniJvPbrE0--

为什么文件大小会发生变化? 为什么要添加这些额外内容?

我的httpclient代码是:

HttpPut httppost = new HttpPut(URIUtil.encodeQuery(newUrl));
httppost.setHeader("X-Auth-Token", cred.getAuthToken());
httppost.addHeader("User-Agent", "NetMagic-file-upload");
System.out.println("Dest : " + dest.getAbsolutePath());

MultipartEntity mpEntity = new MultipartEntity();
ContentBody cbFile = (ContentBody) new FileBody(src);
mpEntity.addPart(dest.getName(), cbFile);
httppost.setEntity(mpEntity);
System.out.println("executing request " + httppost.getRequestLine());

HttpResponse response = httpclient.execute(httppost);

2 个答案:

答案 0 :(得分:0)

似乎正在发生的事情是客户端正在发送要作为多部分实体上载的文件,但服务器将其视为普通文件。故障所在并不完全清楚。

  • 服务器可能忽略了请求标头中的内容类型。这很可能是负责处理上传请求的servlet(或其他)中的错误。

  • 客户端可能未在请求标头中设置内容类型。我原本预计客户端库会为您处理这个问题。但您可能需要明确地这样做。

我建议查看请求标头,因为它们是由客户端发送的,或者是由服务器接收的,以查看是否存在正确的多部分内容类型。这将帮助您确定问题所在。


但有一个明显的解决方案。如果服务器无法处理多部分,请将客户端更改为不发送它们。

答案 1 :(得分:0)

您正在执行PUT请求,但您的客户端使用多部分编码,因为它通常用于HTML表单帖子。