微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

下载时获取 Azure Block Blob 属性 (BlockBlobClient.download)

如何解决下载时获取 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": [
    "*"
]

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

,

要检索 Blob 的元数据,您需要明确获取它们。在 JavaScript 中,您可以通过调用 getProperties() 函数来实现。

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

更多信息:BlobURL class - getProperties(Aborter,IBlobGetPropertiesOptions)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。