如何使用“urllib.request.Request”编码/解码jpg图像以上传

时间:2012-12-18 03:52:13

标签: python python-3.x jpeg image-uploading

在我发布的自定义多部分表单/数据中,我遇到图像无法正确编码的问题。 在发出HTTP POST数据包之后,我注意到代表图像的字节完全不同。我通过捕获工作场景(使用Web浏览器)和使用我的python应用程序的数据包进行了这种比较。

除了如何构造多部分形式的主体之外,没有任何问题,只是图像没有被正确编码为身体。

以下是我打开图片并准备发送图片的方法:

image_data=(open('plane.jpg',mode='rb').read()) ## image_data is the jpeg in bytes                ------------- fist bytes
body.append(str(image_data))   ## coverting the data to a string such that it can be appended to the body array.  ------ bytes to string
body.append(CRLF)
body.append('--' + boundary + '--')
body.append(CRLF)
body=''.join(body)

## starting the post
unicode_data = body.encode('utf-8',errors='ignore')  ## --------string encoded
multipart_header['content-length']=len(unicode_data)
req = urllib.request.Request('http://localhost/api/image/upload', data=unicode_data, headers=multipart_header) ## Packet sent here and the image section of the unicode_data looks wrong but the other sections look good.

正在上传的图片:http://tinypic.com/view.php?pic=5aq3w6&s=6

那么对这个图像进行编码并将其作为要发送的正文的一部分附加的正确方法是什么?除了python 3.3附带的api之外,我不想使用任何api。并希望留在urllib和urllib2 我尝试将图像的字节版本附加到正文,但显然字符串数组只能包含字符串,这就是为什么我用字节创建一个新字符串的原因;我认为这是它下山的地方。

非常感谢谢谢!

0 个答案:

没有答案