直接从 azure blob 存储中服务私有文件。

问题描述 投票:0回答:1

我的网络应用允许用户上传文件.我想使用云计算的azure blob存储。

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

我相信这在谷歌云端的Firebase(Firestorage)上是可以实现的。在那里你可以直接从客户端上传和下载。(我知道认证和授权也是由firebase管理的,所以它让事情变得更简单)

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

例如当用户点击一个 azure 存储下载链接时,一个触发器将检查 JWT 以获得授权,数据将直接从 azure 存储发送至客户端。

azure google-cloud-firestore architecture azure-storage-blobs
1个回答
1
投票

类似的选项与Azure Blob存储也是可用的。你可以使用 Storage SDK 来访问容器和列表下载blob。

有了javascript后端,你可以使用SAS Token或Azure存储JavaScript客户端库也支持创建。BlobService 除了SAS令牌之外,还可以使用基于存储账户密钥的认证。然而,出于安全考虑,使用由后端 Web 服务器使用存储访问策略生成的限时 SAS 令牌。

例子 此处

编辑:我没有完全回答上面的问题。

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

有了Angualr.NET,你就可以使用正常的http获取请求,并使用任何JavaScript应用程序生成的SAS令牌。

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
      );
  }

然而,最好的做法(考虑到安全性)是有一个后端APIAzure函数来处理文件上传。

© www.soinside.com 2019 - 2024. All rights reserved.