azure - 直接从 azure blob 存储提供私有文件
问题描述
我的网络应用程序允许用户上传文件。我想为此使用云天蓝色 blob 存储。
由于下载将非常频繁(比上传更多),我想节省服务器计算时间和带宽,并直接从 azure blob 服务器提供文件。
我相信使用 Firebase (Firestorage) 在 Google Cloud 上可以做到这一点。您可以直接从客户端上传和下载。(我知道身份验证和授权也由 firebase 管理,所以它让事情变得更容易)
Azure 上是否存在任何类似的机制/服务?
例如,当用户单击 azure 存储下载链接时,触发器将检查 JWT 的授权,并且数据将从 azure 存储直接发送到客户端
解决方案
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 函数来处理文件上传。
推荐阅读
- python - ImportError:无法从“__main__”导入名称“设置”
- c - Visual Studio LNK1107:无效或损坏的文件 - 来自 Flat Assembler 的 .obj (COFF)
- php - GROUP BY MYSQLi 中的条件
- javascript - Clients.openWindow() 等效于同一选项卡
- python - 使用 python 在 Post 请求中发送令牌
- python - ImportError:无法导入名称“keras”
- regex - 如何在 VBA 中使用 Regex 将字符串拆分为多行,然后从包含单词“faxed”的行中选择日期
- javascript - 从右到左向下滚动时更改背景颜色
- visual-studio - 在 Visual Studio 2019 中组织 C# 使用?
- c# - 如何检测光线投射的相机?