Html 如何解决nodejs中的结束后写入错误?
我正在尝试从azure blob存储下载多个文件。我有以下代码Html 如何解决nodejs中的结束后写入错误?,html,node.js,blob,Html,Node.js,Blob,我正在尝试从azure blob存储下载多个文件。我有以下代码 exports.fileDownload = (req,res,next) => { for(i=0;i<req.body.FileName.length;i++){ downloadFileName1.push(req.body.FileName[i]); req.body.downloadFileName = downloadFileName1; blobfilename1.push(
exports.fileDownload = (req,res,next) => {
for(i=0;i<req.body.FileName.length;i++){
downloadFileName1.push(req.body.FileName[i]);
req.body.downloadFileName = downloadFileName1;
blobfilename1.push(req.body.Entity_ID + '/' + req.body.FileType + '/' +
req.body.FileName[i]);
req.body.blobFileName = blobfilename1;
}
blobservice.getBlobDataToStream(req,res)
}
------
const getBlobDataToStream = async function(req,res){
for(var j=0;j<downloadNames.Length;j++){
res.setHeader("Content-Disposition","attachment;filename=" + downloadNames[j]);
res.setHeader("Content-Type","image/jpg");
res.setHeader("Access-Control-Allow-Headers","X-Requested-With,content-type");
}
for(var k=0;k<blobF.Length;k++){
getBlob(blobfilename[k]);
}
function getBlob(blobFileNamee){
blobService.getBlobToStream(storageName, blobFileNamee , res, function(error, result, response)
{
console.log("------------------")
if(error){
console.log('error',error);
res.send({error:error, status: false});
}
else{
console.log('resp',result);
resp = result;
res.end();
}
})
}
}
exports.fileDownload=(请求、恢复、下一步)=>{
for(i=0;i尝试异步处理它。将回调包装成承诺并解决或拒绝它。在调用函数的for循环中,将函数设为wait
for(var k=0;k<blobF.Length;k++){
await this.getBlob(blobfilename[k]);
}
static async getBlob(blobFileNamee){
return new Promise((resolve,reject)=>{
blobService.getBlobToStream(storageName, blobFileNamee , res, function(error,result,
response)
{
console.log("------------------")
if(error){
console.log('error',error);
reject(error);
res.send({error:error, status: false});
}
else{
console.log('resp',result);
resolve(result);
}
})
}
}
for(var k=0;k{
getBlobToStream(存储名称、BlobFileName、res、函数(错误、结果、,
(答复)
{
console.log(“--------------------------------”)
如果(错误){
console.log('error',error);
拒绝(错误);
res.send({error:error,status:false});
}
否则{
console.log('resp',result);
决心(结果);
}
})
}
}
问题是您在每个getBlob
中结束请求,每个请求都会发生多次。一个请求只能结束一次,这就是为什么会出现该错误
另一个问题是,您希望在一个请求中发送多个文件,这在浏览器上不起作用。因此,我建议压缩所有文件,而只发送压缩后的文件
您可以使用类似于&blobService.createReadStream
的东西来代替getBlobToStream
发布整个代码,因为这似乎是在一条快速路线内。虽然错误很明显,但我会在您提交整个代码后给出答案,这样就不会有误解了。@MarcosCasagrande谢谢。我已经发布了d、 .你能检查一下吗?你想在同一个请求中下载几个文件吗?@MarcosCasagrande是的。。