azure - 直接从 Azure Blob 存储提供私有(private)文件

标签 azure azure-blob-storage

我的网络应用程序允许用户上传文件。 我想为此使用云 Azure Blob 存储。

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

我相信通过 Firebase (Firestorage) 在 Google 云上可以实现这一点。 您可以直接从客户端上传和下载。 (我知道身份验证和授权也由 firebase 管理,因此它使事情变得更容易)

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

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

最佳答案

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

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

示例 here

编辑:

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

使用 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 函数来处理文件上传。

关于azure - 直接从 Azure Blob 存储提供私有(private)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61441694/

相关文章:

azure - 无法删除 Kubernetes 服务 - Azure

sql - Azure Blob 无法批量加载

azure - ARM 模板 API 管理部署策略内容

javascript - Azure 存储 CORS

java - Azure Functions 和临时文件存储

c# - Azure AppendBlob 的属性 AppendBlobCommissedBlockCount 为 null

azure - 为 Azure Bing map 配置编程部署

sql - MS SQL Server - 使用子查询添加计算列

android - 如何使用 Unity 3D 在 Android 应用程序运行时从云/WEB 访问纹理/模型?

azure - 如何使用 Azure Function 中的范围 header 和部分内容流式传输存储在 Azure Blob 存储中的 mp4 文件?