我意识到这个问题与这个问题相似,但我认为我的情况不同,因为我正在尝试发布图像。
我正在从 Android 活动将图像上传到服务器,并且在某些设备上上传时收到“411 - 所需长度”的错误报告。我无法在此处重现该错误,但用户在与我们能够在不同国家/地区测试的设备不同的设备上报告了此错误。
我们在附加了一些参数的 URL 上打开一个 HttpUrlConnection。这些是字符串和 UUID。它看起来像这样:
http://ourdomainname.net/OurMobileServices/ImageUploadhandler.ashx?filename=image20121220_120734_-901992324.jpeg&username=testusername¬e=&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) 完全不同的东西?
如果需要,我可以发布代码或更详细的信息 - 我对此感到很困惑,并且无法在本地重现错误。我可以从模拟器、手机和平板电脑上传图片。任何帮助将不胜感激,谢谢。