3

<form>Google App Engine でホストされている python webapp サーバーに、html を使用してバイナリ jpeg ファイルをアップロードしています。サーバー メソッドは画像全体を受け取りますが (ファイル サイズ/タイプなどの統計情報を正常に印刷しようとしました)、Google クラウド ストレージ バケットへの書き込みに失敗します。最終的に GCS バケットにあるのは、わずか 48 バイトの破損したファイルです。

def handleUpload(self):

  client = self._get_storage_client()
  bucket = client.get_bucket(config.CLOUD_STORAGE_BUCKET)

  results = []

  for name, fieldStorage in self.request.POST.items():
    if type(fieldStorage) is unicode:
      continue
    result = {}
    fileName = urllib.unquote(fieldStorage.filename)
    blob = bucket.blob(fileName)

    blob.upload_from_string(
        str(fieldStorage.file),fieldStorage.type)

    url = blob.public_url
    if isinstance(url, six.binary_type):
        url = url.decode('utf-8')

    results.append(result)

  return results
4

1 に答える 1

0

理解した。一度にファイル全体ではなく一時バッファを使用してファイルを読み取るため、実際には fieldStorage.file ではなく fieldStorage.file.read() にする必要があります。

于 2016-06-24T10:05:21.707 に答える