Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何解决nodejs中的结束后写入错误?_Html_Node.js_Blob - Fatal编程技术网

Html 如何解决nodejs中的结束后写入错误?

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(

我正在尝试从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(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是的。。