私は画像ファイルをアップロードする必要があり、私は人々が提案するようにMultipartPostHandler.pyを使用します。 でも動作しません。 ここに私のコードです:pythonは画像ファイルをバイナリに読み込むことができます
params = {"upload", open("12345.jpg", "rb")} // in 'rb'
opener = urllib2.build_opener(MultipartPostHandler)
res = opener.open(url, params)
、ここMultipartPostHanderのコードです:
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)
このprobl私をたくさん溺れさせてください、私を助けてください! thx。
バイナリデータを文字列に追加しようとしているが、Pythonは文字列としてそのバイナリデータを解釈しようとしている、とだけさ文字列内の有効なASCII文字(0〜127の値を持つバイト)を許可します。残念ながら、私はバイナリデータをPythonの文字列に追加する方法を知らないか、コメントの代わりに答えを書いていました。 –
aha、ありがとうございます。 –
base64エンコーディングは、バイナリデータの印刷可能な表現を可能にします。私は標準についてはわかりませんが、そのようなエンコーディングを試すのは害ではありません。 – krs1