从Azure Blob存储返回Blob而不保存它

0 投票
1 回答
593 浏览
提问于 2025-04-17 18:41

我正在尝试从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的示例代码,但我可以告诉你一些验证的步骤:

  1. 确保这个容器不对外公开,只有你自己可以访问。
  2. 客户端向你的网页应用发送请求,请求里面的某个文件。
  3. 检查这个客户端是否有权限访问这个文件(如果没有权限,就返回401错误)。
  4. 为这个文件创建一个共享访问签名,时间设置得短一些(大约5分钟就可以)。
  5. 返回一个303(查看其他)状态码给客户端,并在Location-Header里放上这个文件的链接。

举个例子:

客户端请求 http://myservice.cloudapp.net/blobs/somefile.ext,并且确认他有权限访问这个资源。然后他会被重定向到 http://mystorage.blob.core.windows.net/container/somefile.ext?SHARED_ACCESS_SIGNATURE。这个链接只在几分钟内对这个客户端有效。

撰写回答