如何在Python中通过Flask在内存中传递Azure Blob



我对python和编程都是新手。我已经得到了相当远与我的Terraform Private Registry API在这里。

我有这样的情况,我正在从Azure Blob存储中提取zip,代码托管在托管身份Azure web应用程序中,并且它具有Blob的权限。

实际上发生的是我把它拉下来然后通过send_file传递出去。

然而,我不得不把它写到一个临时目录中,这个目录会一直存在。

所以最终,如果没有清理任务,这将被垃圾文件填满。

我试图找出如何做到这一切在内存中,或使用临时文件和上下文,但它只是不会工作。当它到达send_file部分时,即使我把它放在With中,它也在传递垃圾或者说文件路径不存在。

感觉这应该是很可能的,所以我希望有人能引导我,甚至只是告诉我。我花了几个小时试图弄清楚iobytes风格的流方法,它有点超出了我的能力,所以我希望得到一个帮助。

我甚至想用一种方法让目录自动清理,但从我对Flask函数返回部分的理解来看,你已经完成了,在它触发之后什么也没有。

@app.route('/v1/modules/<namespace>/<name>/<provider>/<version>/local.zip', methods=['GET'])
def downloadfile(namespace, name,provider,version):
bloburl = f'{azblobstoragehost}/{azcontainer}/v1/modules/{namespace}/{name}/{provider}/{version}/local.zip'
token_credential = DefaultAzureCredential()
blob_client = BlobClient.from_blob_url(bloburl, credential=token_credential)  
download_stream = blob_client.download_blob()
# create a temporary directory using the context manager
#f = tempfile.TemporaryDirectory(dir = "temp")
f = tempfile.mkdtemp(dir = "temp") #this one works
with open(f'{f}/local.zip', "wb") as my_blob:
download_stream = blob_client.download_blob()
my_blob.write(download_stream.readall())
return send_file(f'{my_blob.name}')

谢谢我得到了这个工作与一些努力!我有点担心使用sas以防它被窥探?是否真的有一种方法可以像我说的那样传递文件,或者没有什么可担心的,并且sas不能被窥探和使用?

最新更新