1

次のようなコードがあり、ローカルでそのまま動作します (AppEngine を使用しません)。

bodyParams = { "file" : open( filePath, "rb" )  }
request = urllib2.Request( requestUrl, None, self.buildAuthInfo() )
response = self.getOpener().open(request, bodyParams).read()

openGoogle AppEngineopen( filePath, "rb" )ではファイルの操作が禁止されている (または非常に不便な) ため、 を削除したいと考えています。

この問題を解決するために、base64 でエンコードされた画像ファイルの HTTP POST データを取得し、それをデコードします。次のコマンドを使用して、cURL 経由でエンコードされたデータを送信します。

curl -X POST -F image=@encoded http://localhost:8080/image-process

encodedbase64でエンコードされたjpgです。

StringIOこの時点で、デコードされたデータをオブジェクトに入れるか、直接渡して内部で使用するという 2 つの異なることを試しましたbodyParams = { "file" : DECODEDVALUE}。これらのいずれかが機能することを期待しますが、ターゲット サーバー (外部 API 要求を実行している場所) から HTTP 500 エラーが発生します。これは私が値をデコードする方法です:

img = self.request.get('image')
DECODEDVALUE = MyStringIO(base64.b64decode(img))

エンコーディングおよび/またはバイナリ モードに関連する問題があると思います。エンコーディングおよび/またはバイナリ モードに関連する問題があると思います。

、、またはオブジェクトopenを優先して、ファイル オブジェクトを削除して使用するにはどうすればよいですか?StringIOBytesIOstr


注: わかりやすくするために、元の問題とは関係ありません。MyStringIOのサブクラスで、以下StringIO.StringIO__len__追加されています。

class MyStringIO(StringIO.StringIO):
  def __len__(self):
    return self.len

4

0 に答える 0