我正在尝试使用适用于Node.js的Microsoft Azure存储SDK和适用于浏览器的JavaScript(https://github.com/Azure/azure-storage-node)在浏览器中显示存储在Azure blob中的PDF内容。到目前为止,我找不到任何有关此操作的示例。
我尝试遵循https://github.com/Azure/azure-storage-node/issues/440的建议,但是无法使其生效。我正在使用Azure函数。
module.exports = async function (context, req) {
let accessToken = await getAccessToken();
let container = req.params.container;
let filename = req.params.filename;
let tokenCredential = new azure.TokenCredential(accessToken);
let storageAccountName = process.env.StorageAccountName;
let blobService = azure.createBlobServiceWithTokenCredential(`https://${storageAccountName}.blob.core.windows.net/`, tokenCredential);
return new Promise((resolve, reject) => {
let readStream = blobService.createReadStream(container, filename, function (error, result, response) {
if (error) {
context.log(error);
context.log(response);
context.res = {
status: 400,
body: response
};
resolve(context.res);
}
});
let body = '';
readStream.on('data', (chunk) => {
body += chunk;
});
readStream.on('end', () => {
context.res = {
headers: {
'Content-Type': "application/pdf"
},
body: body
};
resolve(context.res);
});
});
};
但是我在浏览器中收到“无法打开PDF”错误消息或超时错误。
答案 0 :(得分:1)
要在浏览器环境中下载blob,建议将URL与SAS一起使用,并且在您使用的框架中,指向PDF的可访问URL是否足够?
请遵循example:
下载Blob BlobService提供用于将Blob下载到浏览器内存中的接口。由于浏览器的沙箱限制,我们无法将下载的数据干线保存到磁盘中,直到将Blob的所有数据干线放入浏览器内存中为止。浏览器的内存大小也受到限制,尤其是对于下载巨大的Blob,因此建议直接在具有SAS Token授权链接的浏览器中下载Blob。
共享访问签名(SAS)是提供对blob和容器的精细访问而无需提供存储帐户名或密钥的安全方法。共享访问签名通常用于提供对数据的有限访问,例如允许移动应用访问blob。