我正在尝试在Python中创建一个函数,在该函数中传递文件名和图像对象,并将它们上传到Google存储桶。我已经创建了存储桶,将所有凭据存储在一个环境变量中,但是我对整个过程感到困惑。
当前我具有以下设置:
class ImageStorage:
bucket_name = os.getenv('STORAGE_BUCKET_NAME')
project_name = os.getenv('STORAGE_BUCKET_PROJECT_ID')
client = storage.Client(project=project_name)
bucket = client.get_bucket(bucket_name)
def save_image(self, filename, image):
blob = self.bucket.blob(filename)
blob.upload_from_file(image)
但是一旦运行此命令,我就会收到错误消息:
total bytes could not be determined. Please pass an explicit size, or supply a chunk size for a streaming transfer.
我不确定如何提供此图像对象的字节大小。我是否首先需要根据图像对象在本地创建文件,然后继续上传?
答案 0 :(得分:1)
根据Github issue,您应提供chunk_size
参数用于流上传。
blob = self.bucket.blob(filename, chunk_size=262144) # 256KB
blob.upload_from_file(image)
chunk_size(int)–每次迭代时数据块的大小(以字节为单位)。每个API规范必须为256 KB的倍数。