我正在尝试解密文件并将其发送给客户端。仅下载文件就可以正常工作,如下所示:

input.pipe(res);


但是当我将解密器添加到管道中时,如下所示:

input.pipe(decipher).pipe(res);


这会导致文件下载在浏览器中保持打开状态。我是否需要关闭解密流或其他内容?
这是完整的方法:

router.get('/', function(req, res, next) {
    var filePath = 'C:\\Users\\Anthony\\test';
    var stat = fs.statSync(filePath);

    var key = '1234asdf';
    var decipher = crypto.createDecipher('aes-256-cbc', key)

    res.setHeader('Content-Length', stat.size);
    res.setHeader('Content-disposition', 'attachment; filename=test.mp4');
    var input = fs.createReadStream(filePath);

    input.pipe(decipher).pipe(res);
});

最佳答案

最有可能发生的是,您为浏览器提供了编码的文件长度,而不是解密的文件长度,这可能有所不同。您可以尝试完全省略Content-Length标头,看看是否可行(这将导致改为使用分块编码)。

关于node.js - crypto.decipher导致流无法在 Node js中关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34734004/

10-09 04:07