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);
4

2 回答 2

0

似乎正在发生的是客户端正在发送要作为多部分实体上传的文件,但服务器将其视为纯文件。目前尚不完全清楚故障在哪里。

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

  • 客户端可能没有在请求标头中设置内容类型。我原以为客户端库会为您解决这个问题。但是您可能需要明确地执行此操作。

我建议查看客户端发送或服务器接收到的请求标头,以查看是否存在适当的多部分内容类型。这将帮助您确定问题出在哪里。


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

于 2013-01-16T10:20:02.273 回答
0

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

于 2013-01-16T10:20:26.043 回答