crypto.decipher导致流不在节点js中关闭

时间:2016-01-12 01:12:39

标签: node.js express

我试图解密文件并将其发送到客户端的响应中。它只适用于下载文件,如下所示:

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);
});

1 个答案:

答案 0 :(得分:2)

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