如何将FileStorage对象转换为b2sdk.v2.Python中的AbstractUploadSource.<



我使用Backblaze B2和b2sdk。

这是我尝试的代码,使用upload方法:

# I am not showing authorization code...
def upload_file(file):
bucket = b2_api.get_bucket_by_name(bucket_name)
file = request.files['file']
bucket.upload(
upload_source=file,
file_name=file.filename,
)

显示如下错误

AttributeError: 'SpooledTemporaryFile' object has no attribute 'get_content_length'

我认为这是因为我为upload_source参数使用了FileStorage实例。

我想知道我是否正确使用API,如果不是,我应该如何使用它?

感谢

你是正确的-你不能使用FlaskFileStorage实例作为B2 SDKUploadSource。您需要做的是对文件的内容使用upload_bytes方法:

def upload_file(file):
bucket = b2_api.get_bucket_by_name(bucket_name)
file = request.files['file']
bucket.upload_bytes(
data_bytes=file.read(),
file_name=file.filename,
...other parameters...
)

注意这会将整个文件读入内存. 如果出现问题(通常是网络),upload_bytes方法可能需要重新启动上传,因此文件不能真正直接流式传输到B2。

如果你预计你的文件不适合内存,你应该考虑使用create_file_stream来上传文件块。

最新更新