我正在尝试为一个Node.js应用程序实现一个下载路由器。在多次下载后,我的应用程序崩溃了。有什么建议吗?
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);
此外,在阅读了将文件流式传输到客户端后,res.end()从未被发送之后,我尝试了以下内容:
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();
});
它不起作用 :(,我得到了相同的错误