次のようなコードがあり、ローカルでそのまま動作します (AppEngine を使用しません)。
bodyParams = { "file" : open( filePath, "rb" ) }
request = urllib2.Request( requestUrl, None, self.buildAuthInfo() )
response = self.getOpener().open(request, bodyParams).read()
open
Google AppEngineopen( filePath, "rb" )
ではファイルの操作が禁止されている (または非常に不便な) ため、 を削除したいと考えています。
この問題を解決するために、base64 でエンコードされた画像ファイルの HTTP POST データを取得し、それをデコードします。次のコマンドを使用して、cURL 経由でエンコードされたデータを送信します。
curl -X POST -F image=@encoded http://localhost:8080/image-process
encoded
base64でエンコードされたjpgです。
StringIO
この時点で、デコードされたデータをオブジェクトに入れるか、直接渡して内部で使用するという 2 つの異なることを試しましたbodyParams = { "file" : DECODEDVALUE}
。これらのいずれかが機能することを期待しますが、ターゲット サーバー (外部 API 要求を実行している場所) から HTTP 500 エラーが発生します。これは私が値をデコードする方法です:
img = self.request.get('image')
DECODEDVALUE = MyStringIO(base64.b64decode(img))
エンコーディングおよび/またはバイナリ モードに関連する問題があると思います。エンコーディングおよび/またはバイナリ モードに関連する問題があると思います。
、、またはオブジェクトopen
を優先して、ファイル オブジェクトを削除して使用するにはどうすればよいですか?StringIO
BytesIO
str
注: わかりやすくするために、元の問題とは関係ありません。MyStringIO
のサブクラスで、以下StringIO.StringIO
が__len__
追加されています。
class MyStringIO(StringIO.StringIO):
def __len__(self):
return self.len