我使用下面的代码从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,在第二次调用期间,弹出一些值,但是它是无用的,因为在这种情况下,等待不起作用,并且线程以未定义的值结束。有什么我想念的吗?
您收到此错误的原因是因为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);
}
});
)