2013-01-16 107 views
0

我使用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); 
+0

上传时本地文件被修改了吗?或者这是什么到达服务器? – flup

回答

0

什么似乎情况是,客户端发送的文件上传为多实体,但服务器将其当作一个纯文本文件。不清楚问题出在哪里。

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

  • 客户端可能未在请求头中设置内容类型。我本来期望客户端库会为你照顾。但有可能你需要明确地做到这一点。

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


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

+0

(问题在于请求方法(PUT)和多部分编码的结合) –

0

您正在执行PUT请求,但您的客户端使用多部分编码作为HTML表单帖子中的常用方法。

+0

AFAIK,HTTP规范中没有什么说你不能在PUT请求中执行此操作。相反,规范说服务器负责正确处理多部分内容类型...或拒绝PUT请求。 (但是,没有证据表明正在发送适当的内容类型* ......) –

+0

这是事实。但是规范中也没有说服务器除了存储有效载荷(它所做的)之外应该做任何事情。 –

+0

我在快速存储上传文件 –