node.js - 尝试下载容器文件时出现“{“message”:“标题 \"Content-Type\""} 的无效值 \"undefined\" 错误
问题描述
我使用下面的代码从 azure 容器中获取文件。
const azure = require('azure-storage');
const url = `https://${storageAccountName}.blob.core.windows.net}`;
const blobSvc = azure.createBlobService(storageAccountName, accessKey, url);
const read = blobSvc.createReadStream(containerName, fileName);
res.setHeader('Content-Disposition', `attachment; filename=${filename}`);
res.setHeader('Content-Type', read.contentType);
readable.stream.pipe(res);
但是,当我下载文本文件时,我进入{"message":"Invalid value \"undefined\" for header \"Content-Type\""}
了文件。
const azure = require('azure-storage');
const url = `https://${storageAccountName}.blob.core.windows.net}`;
const blobSvc = azure.createBlobService(storageAccountName, accessKey, url);
const properties = blobSvc.getBlobProperties(
containerName,
fileName,
function(err, properties, status) {
if (err) {
res.send(502, "Error fetching file: %s", err.message);
} else if (!status.isSuccessful) {
res.send(404, "The file %s does not exist", fileName);
} else {
return properties;
}
});
)
返回属性;
在这个函数中,对于第一次调用,它返回 null,在第二次调用期间会弹出值,但它是无用的,因为在这种情况下 await 不起作用并且线程以未定义的值结束。有什么我错过了吗?
解决方案
您收到此错误的原因是因为向blobSvc.createReadStream
您返回了一个没有contentType
属性的流。
如果您需要在响应标头中发送内容类型,您首先需要获取 blob 的属性并contentType
从那里使用该属性。
这是一个示例代码(未经测试)(参考:https ://willi.am/blog/2014/07/03/azure-blob-storage-and-node-downloading-blobs/ ):
blobSvc.getBlobProperties(
containerName,
fileName,
function(err, properties, status) {
if (err) {
res.send(502, "Error fetching file: %s", err.message);
} else if (!status.isSuccessful) {
res.send(404, "The file %s does not exist", fileName);
} else {
res.setHeader('Content-Disposition', `attachment; filename=${filename}`);
res.setHeader(Content-Type', properties.contentType);
blobService.createReadStream(containerName, fileName).pipe(res);
}
});
)
推荐阅读
- java - 在Java中使用循环在数组的开头插入一个字符串元素而不使最后一个元素消失
- reactjs - TypeError:无法读取未定义的属性(读取“地图”)
- flutter - 如何在颤动中变形图像?
- javascript - 如何找到二维数组中的最大数?
- javascript - Keycloak 在一台服务器上,客户端应用在不同的服务器上
- python - PyTorch 的 nn.Conv2d 半精度(fp16)比 fp32 慢
- java - 为 QR 码边缘而不是方形自定义 QR 码,并且想要更改代码 android 的颜色?
- python - 为什么模块超过1.0e+18会报错
- reactjs - 在 AWS t2.micro 中使用 create-react-app 运行开发服务器
- java-8 - 使用多个分隔符拆分字符串