首页 > 解决方案 > 直接从 azure blob 存储提供私有文件

问题描述

我的网络应用程序允许用户上传文件。我想为此使用云天蓝色 blob 存储。

由于下载将非常频繁(比上传更多),我想节省服务器计算时间和带宽,并直接从 azure blob 服务器提供文件。

我相信使用 Firebase (Firestorage) 在 Google Cloud 上可以做到这一点。您可以直接从客户端上传和下载。(我知道身份验证和授权也由 firebase 管理,所以它让事情变得更容易)

Azure 上是否存在任何类似的机制/服务?

例如,当用户单击 azure 存储下载链接时,触发器将检查 JWT 的授权,并且数据将从 azure 存储直接发送到客户端

标签: azureazure-blob-storage

解决方案


Azure Blob 存储也提供类似的选项。您可以使用Storage SDK访问容器并列出/下载 blob

使用 javascript 后端您可以使用 SAS 令牌或 Azure 存储 JavaScript 客户端库BlobService,除 SAS 令牌外,还支持基于存储帐户密钥创建身份验证。但是,出于安全考虑,请使用由后端 Web 服务器使用存储访问策略生成的限时 SAS 令牌。

这里的例子

编辑:

我没有完全回答上面的问题,但是如果你想访问 blob 存储或从 blob 存储下载任何文件,你可以使用普通的 http get 请求和任何 JavaScript 应用程序生成的 SAS 令牌。

使用 Angualr:

uploadToBLob(files) {
    let formData: FormData = new FormData();
    formData.append("asset", files[0], files[0].name);
    this.http.post(this.baseUrl + 'insertfile', formData)
      .subscribe(result => console.log(result));
  }

  downloadFile(fileName: string) {
    return this.http.get(this.baseUrl + 'DownloadBlob/' + fileName, { responseType: "blob" })
      .subscribe((result: any) => {
        if (result) {
          var blob = new Blob([result]);
          let saveAs = require('file-saver');
          let file = fileName;
          saveAs(blob, file);
          this.fileDownloadInitiated = false;
        }
      }, err => this.errorMessage = err
      );
  }

然而,最佳实践(考虑到安全性)是有一个后端 API/Azure 函数来处理文件上传。


推荐阅读