Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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
Javascript 在NodeJS中下载文件_Javascript_Node.js_Download - Fatal编程技术网

Javascript 在NodeJS中下载文件

Javascript 在NodeJS中下载文件,javascript,node.js,download,Javascript,Node.js,Download,我正在尝试为nodejs应用程序实现一个下载路由器。几次下载后,我的应用程序崩溃了。有什么建议吗 app.route( "/download" ) .get( (req, res) => { var filename = req.query.filename; var file = __dirname + '/upload/' + filename; var mimetype = mime.lookup(file); res.setHeader('Cont

我正在尝试为nodejs应用程序实现一个下载路由器。几次下载后,我的应用程序崩溃了。有什么建议吗

app.route( "/download" )
.get( (req, res) => {
    var filename = req.query.filename;
    var file = __dirname + '/upload/' + filename;
    var mimetype = mime.lookup(file);

    res.setHeader('Content-disposition', 'attachment; filename=' + req.query.filename);
    res.setHeader('Content-type', mimetype);

    var filestream = fs.createReadStream(file);
    filestream.pipe(decrypt).pipe(res);

})
我得到这个错误:

    Error [ERR_STREAM_WRITE_AFTER_END]: write after end
at writeAfterEnd (_stream_writable.js:243:12)
at Decipher.Writable.write (_stream_writable.js:291:5)
at ReadStream.ondata (_stream_readable.js:666:20)
at ReadStream.emit (events.js:182:13)
at addChunk (_stream_readable.js:283:12)
at readableAddChunk (_stream_readable.js:264:11)
at ReadStream.Readable.push (_stream_readable.js:219:10)
at fs.read (internal/fs/streams.js:196:12)
at FSReqCallback.wrapper [as oncomplete] (fs.js:473:5)
    Emitted 'error' event at:
at Decipher.onerror (_stream_readable.js:690:12)
at Decipher.emit (events.js:182:13)
at writeAfterEnd (_stream_writable.js:245:10)
at Decipher.Writable.write (_stream_writable.js:291:5)
[... lines matching original stack trace ...]
at FSReqCallback.wrapper [as oncomplete] (fs.js:473:5)
更新 有人询问解密,文件使用加密模块加密:

var decrypt = crypto.createDecipher(algorithm, password);
此外,在阅读之后,我尝试了以下方法:

var filestream = fs.createReadStream(file);
    filestream.pipe(decrypt).pipe(res, {end: false});
    filestream.on("close", function() {
        res.status(200);
        res.end();
    });
    filestream.on("error", function() {
        res.status(400);
        res.end();
    });

它不工作:(,我得到相同的错误

只需使用
res.download()


此错误通常在内存不足时发生。 因此,我们必须在使用后关闭每一条流

流是事件发射器,因此您可以侦听某些事件

app.route( "/download" ).get( (req, res) => {
var filename = req.query.filename;
var file = __dirname + '/upload/' + filename;
var mimetype = mime.lookup(file);

res.setHeader('Content-disposition', 'attachment; filename=' + req.query.filename);
res.setHeader('Content-type', mimetype);

var filestream = fs.createReadStream(file);
filestream.pipe(decrypt).pipe(res);
filestream.on("finish", function(){
  res.send();
})

})

什么是
decrypt
?我的猜测是,由于您从未使用
res
关闭请求,因此您的请求在系统内存中挂起。@omerowitz我更新了我的问题。@DLowther是的,我尝试了几种方法正确结束请求,但没有任何效果。但是我的文件已加密,我必须解密首先,我怎么才能在下载之前解密呢?但如果我这么做,据我所知,我可能会过早关闭它。对吗?@Alexturean不确定你说的“太早”是什么意思?你可以通过在你的code@Bhuvi不管怎样,我为您尝试过,但发现内存泄漏时出错。