2

我意识到这个问题与这个问题相似,我认为我的情况不同,因为我正在尝试发布图像。

我正在从 Android 活动将图像上传到服务器,并且在某些设备上上传时收到“411 - 所需长度”的错误报告。我无法在此处重现该错误,但用户在与我们能够在不同国家/地区测试的设备不同的设备上报告了此错误。

我们在附加了一些参数的 URL 上打开一个 HttpUrlConnection。这些是字符串和 UUID。它看起来像这样:

http://ourdomainname.net/OurMobileServices/ImageUploadhandler.ashx?filename=image20121220_120734_-901992324.jpeg&username=testusername&note=&uploadid=b4a1c35b-b869-4f7e-a645-6a4a180f0985&taskid=7f02deb8-c078-45c4-bc37-99e418e8cdf9

然后我们使用 getOutputStream 获取一个 OutputStream,我们将图像文件字节写入其中。

我一直在寻找有关 411 错误的信息并在 HttpUrlConnection 对象上设置内容长度。似乎我可以将内容长度设置为请求属性,例如:

connection.setRequestProperty("Content-Length", String.valueOf(<mycomputedInt>));

或者我可以使用:

connection.setFixedLengthStreamingMode() 

里面有内容长度编号。

我的问题是:内容长度应该测量什么?是指:

a) 包括参数的整个 URL?

b) URL 编码的参数?

c)我正在上传的图像的字节数组的长度?

d) 图像字节数组的长度,以及 URL 编码的参数?

e) 完全不同的东西?

如果需要,我可以发布代码或更详细的信息 - 我对此感到很困惑,并且无法在本地重现错误。我可以从模拟器、手机和平板电脑上传图片。任何帮助将不胜感激,谢谢。

4

1 回答 1

2

Content-Length 应该是您写入 OutputStream 的任何内容的长度。所以在这种情况下,答案是 C。

我认为这个站点非常清楚地解释了 HTTP 请求的结构,您可能会发现它很有帮助。

于 2012-12-20T12:46:13.777 回答