我正在使用 html 上传二进制 jpeg 文件 <form>到我在 Google App Engine 上托管的 python webapp 服务器。服务器方法接收整个图像(尝试成功打印文件大小/类型等统计信息),但无法将其写入谷歌云存储桶。最终出现在 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 因为它使用临时缓冲区读取文件而不是一次读取整个文件。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!