这是我的代码的一部分,该代码将提取一个上传到Azure blob的zip文件,然后将其发送回调用方。
Azure返回的内容类型为application/x-zip-compressed
。但是,我需要返回application/zip
。如果我没有在代码中设置标题,它将返回text/plain; charset=utf-8
。如果确实按照下面的代码设置标头,则它返回application/zip; charset=utf-8
。结果是即使下载了该文件,我也无法使用winzip打开它。
我的问题是,如何将文件转换为application/zip
?
var express = require('express');
var request = require('request');
var router = express.Router();
router.post('/', function (req, res) {
request.get("https://path-to-my-azure-storage-blob/"+ fileName, function (error, response, body) {
if (error){
console.log('error:', error); // Print the error if one occurred
} else {
console.log("Status Code: ", response.statusCode)
console.log("Content-type: ", response.headers['content-type'])
res = {
"status": 200,
"headers": {
'Content-Type': 'application/zip'
},
"body": body
};
res.end();
}
});
})
答案 0 :(得分:0)
在这里https://stackoverflow.com/a/12029764/1225266
回答为什么下载的blob / zip是“ corrupt”的因此解决方案是(可以根据需要进一步简化)
request.get("https:/....blob.core.windows.net/folder/some.zip", null)
.on('error', (error) => {
console.log(error);
})
.on('response', function(response) {
res.writeHead(200, {
'Content-Type': response.headers['content-type'],
'Content-disposition': 'attachment;filename=anotherfilename.zip',
'Content-Length': response.headers['content-length']
});
})
.on('data', (d) => {
res.write(d);
})
.on('end', () => {
res.end()
});
处了解如何将响应从天青直接传送到客户端。