Python可以将图像文件读取为二进制
我需要上传一个图片文件,按照大家的建议,我使用了MultipartPostHandler.py这个工具。
但是还是不行。
这是我的代码:
params = {"upload", open("12345.jpg", "rb")} // in 'rb'
opener = urllib2.build_opener(MultipartPostHandler)
res = opener.open(url, params)
这是MultipartPostHandler里面的代码:
def multipart_encode(vars, files, boundary = None, buffer = None):
if boundary is None:
boundary = mimetools.choose_boundary()
if buffer is None:
buffer = ''
for(key, value) in vars:
buffer += '--%s\r\n' % boundary
buffer += 'Content-Disposition: form-data; name="%s"' % key
buffer += '\r\n\r\n' + value + '\r\n'
for(key, fd) in files:
file_size = os.fstat(fd.fileno())[stat.ST_SIZE]
filename = fd.name.split('/')[-1]
contenttype = mimetypes.guess_type(filename)[0] or 'application/octet-stream'
buffer += '--%s\r\n' % boundary
buffer += 'Content-Disposition: form-data; name="%s"; filename="%s"\r\n' % (key, filename)
buffer += 'Content-Type: %s\r\n' % contenttype
# buffer += 'Content-Length: %s\r\n' % file_size
fd.seek(0)
buffer += '\r\n' + fd.read() + '\r\n'
buffer += '--%s--\r\n\r\n' % boundary
return boundary, buffer
multipart_encode = Callable(multipart_encode)
https_request = http_request
错误出现在:
buffer += '\r\n' + fd.read() + '\r\n'
错误信息是:
'ascii' codec can't decode byte 0xff in position 2: ordinal not in range(128)
这个问题让我很头疼,请帮帮我!
谢谢。
2 个回答
0
# 将每个数据字节转换成对应的两位十六进制数
hex_str = str(binascii.hexlify(data))`
# 现在创建一个包含两位十六进制数的列表
hex_list = []
bin_list = []
for ix in range(2, len(hex_str)-1, 2):
hex = hex_str[ix]+hex_str[ix+1]
hex_list.append(hex)
bin_list.append(bin(int(hex, 16))[2:])
#打印 bin_list
bin_str = "".join(bin_list)
print(bin_str)
1
我用Doug Hellman在他博客上分享的MultiPartForm类,成功地把文件上传到我们的邮件服务器。你可以在这里找到相关内容:http://pymotw.com/2/urllib2/index.html#module-urllib2
希望你也能用上这个方法。