尝试下载容器文件时,获取标头\“ Content-Type \”“}”时报头\“ Content-Type \”“}”的值无效'\“ undefined \”

问题描述 投票:0回答:1

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

node.js typescript azure azure-storage azure-stream-analytics
1个回答
0
投票

您收到此错误的原因是因为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);
        }
    });
)
© www.soinside.com 2019 - 2024. All rights reserved.