【发布时间】:2016-05-17 19:23:11
【问题描述】:
我需要将文件从谷歌云存储传输到 Azure Blob 存储。
Google 提供了一个代码 sn-p 来将文件下载到字节变量,如下所示:
# Get Payload Data
req = client.objects().get_media(
bucket=bucket_name,
object=object_name,
generation=generation) # optional
# The BytesIO object may be replaced with any io.Base instance.
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, req, chunksize=1024*1024)
done = False
while not done:
status, done = downloader.next_chunk()
if status:
print 'Download %d%%.' % int(status.progress() * 100)
print 'Download Complete!'
print fh.getvalue()
我可以通过像这样更改 fh 对象类型来修改它以存储到文件中:
fh = open(object_name, 'wb')
然后我可以使用 blob_service.put_block_blob_from_path 上传到 azure blob 存储。
我想避免在进行传输的机器上写入本地文件。
我收集 Google 的 sn-p 将数据一次加载到 io.BytesIO() 对象中。我认为我可能应该使用它来一次写入 blob 存储块。
我尝试将整个内容读入内存,然后使用put_block_blob_from_bytes 上传,但出现内存错误(文件可能太大(~600MB)。
有什么建议吗?
【问题讨论】:
-
这里好像 append blob 是一个解决方案,但
azure-storage-python似乎还不支持。 -
追加 blob 是如何解决这个问题的?
标签: python azure google-cloud-storage azure-blob-storage