javascript - 下载时获取 Azure Block Blob 属性 (BlockBlobClient.download)
问题描述
我正在尝试使用 SASToken url 从 azure blob 存储容器下载 blob。
代码 v1:
const blobClient = new BlobClient(urlWithSASToken, new AnonymousCredential()).getBlockBlobClient();
blobClient.download().then(async result => {
const blob: Blob = await result.blobBody;
console.log('Azure file metadata:');
console.log(result.metadata);
const fileName: string = result.metadata.filename;
FileHelper.downloadBlobAs(blob, fileName);
});
代码 v2:
try {
const blobClient = new BlobClient(urlWithSASToken, new AnonymousCredential()).getBlockBlobClient();
const downloadResponse = await blobClient.download();
const blob: Blob = await downloadResponse.blobBody;
console.log('Azure file metadata:');
console.log(downloadResponse.metadata);
const fileName: string = downloadResponse.metadata.filename;
FileHelper.downloadBlobAs(blob, fileName);
} catch (err: any) {}
该文件已下载,但名称为“未定义”,因为 result.metadata 似乎为空。我查看了 XHR,我正在寻找的元数据在那里(如“x-ms-meta-filename”),但似乎在 BlobDownloadResponseParsed.metadata 对象中不可用。
CORS 是使用 ARM 模板设置的。以下是相关部分:
"cors": {
"corsRules": [{
"allowedOrigins": [
"[parameters('WebsiteURL')]"
],
"allowedMethods": [
"PUT",
"GET"
],
"maxAgeInSeconds": 0,
"exposedHeaders": [
"Access-Control-*"
],
"allowedHeaders": [
"content-type",
"x-ms-blob-content-type",
"x-ms-blob-type",
"x-ms-client-request-id",
"x-ms-meta-filename",
"x-ms-version"
]
}]
}
解决方案
本质上问题在于您的 CORS 设置(暴露的标头)。您只是公开了Access-Control
相关的响应标头,这就是为什么您没有获取元数据,因为x-metadata-*
响应标头没有公开(阻止)。
请通过执行以下操作更改Exposed Headers
以允许所有响应标头:
"exposedHeaders": [
"*"
]
您应该会看到填充的元数据。
推荐阅读
- python - 如何检查一个项目是否是列表中的第一个项目
- asp.net-mvc - 在 MVC 中隐藏 URL 中的用户 ID
- python - 如何将图像分类为噪声图像和无噪声图像?
- django - Dango bootstrap 样式在 dev-box 上显示很好,而不是在生产中
- c# - 使用 FireFox 而非 Chrome 时发生双重回发
- python - Django - 注册重定向到登录页面不起作用
- javascript - 从 Microsoft Graph API(测试版)通信 API 获取实时更新
- android - 如何将图像放在文本中间的文本下方?
- environment-variables - 如何在 Atom 中运行 python 文件?康达环境?
- javascript - 无法设置未定义的属性“selectedIndex”