google 云存储仅为每个文件存储 (48 B)
google cloud storage stores only (48 B) for each file
我正在使用 html <form>
将二进制 jpeg 文件上传到我在 Google App Engine 上托管的 python webapp 服务器。服务器方法接收整个图像(尝试成功打印文件 size/type 等统计数据),但无法将其写入 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
想通了。实际上它应该是 fieldStorage.file.read() 而不是 fieldStorage.file 因为它使用临时缓冲区读取文件而不是一次读取整个文件。
我正在使用 html <form>
将二进制 jpeg 文件上传到我在 Google App Engine 上托管的 python webapp 服务器。服务器方法接收整个图像(尝试成功打印文件 size/type 等统计数据),但无法将其写入 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
想通了。实际上它应该是 fieldStorage.file.read() 而不是 fieldStorage.file 因为它使用临时缓冲区读取文件而不是一次读取整个文件。