下载Azure块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) {}

该文件被下载;未定义的";作为名称,作为结果。元数据似乎为空。我查看了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": [
"*"
]

您应该看到填充的元数据。

要检索Blob的元数据,需要显式获取它们。在JavaScript中,您可以通过调用getProperties()函数来完成此操作。

返回blob的所有用户定义元数据、标准HTTP属性和系统属性。它不返回blob的内容。

更多信息:Blob URL class-getProperties(Aborter,IBlobGetPropertiesOptions(

最新更新