カスタム multipart-form/投稿されたデータで画像が適切にエンコードされないという問題が発生しています。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 は使用したくありません。urllib と urllib2 内にとどまりたいので、画像のバイト バージョンを本文に追加しようとしましたが、明らかに文字列配列には文字列しか含めることができないため、画像をバイト単位で使用して新しい文字列を作成しました。ここが下り坂だと思います。
助けてくれてありがとう!