从Azure Blob存储返回Blob而不保存它
我正在尝试从Azure的Blob存储中获取文件,并把这些文件返回给用户,让他们可以下载。
现在我想做的是从Azure获取文件,先把它保存在本地,然后再把这个文件作为静态文件返回给用户:
def getDownload(filename):
try:
file = blob.get_blob('picture', filename)
with open(filename, 'w') as f:
f.write(file)
except:
abort(400, 'Download blob fail')
return static_file(filename, root='.', download=filename)
我想要做的是直接把文件流给用户,而不是先把文件保存在服务器上。
我该怎么做呢?
1 个回答
1
很遗憾,我没有Python的示例代码,但我可以告诉你一些验证的步骤:
- 确保这个容器不对外公开,只有你自己可以访问。
- 客户端向你的网页应用发送请求,请求里面的某个文件。
- 检查这个客户端是否有权限访问这个文件(如果没有权限,就返回401错误)。
- 为这个文件创建一个共享访问签名,时间设置得短一些(大约5分钟就可以)。
- 返回一个303(查看其他)状态码给客户端,并在Location-Header里放上这个文件的链接。
举个例子:
客户端请求 http://myservice.cloudapp.net/blobs/somefile.ext,并且确认他有权限访问这个资源。然后他会被重定向到 http://mystorage.blob.core.windows.net/container/somefile.ext?SHARED_ACCESS_SIGNATURE。这个链接只在几分钟内对这个客户端有效。