我试图解密文件并将其发送到客户端的响应中。它只适用于下载文件,如下所示:
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);
});
答案 0 :(得分:2)
最有可能发生的事情是,您为浏览器提供编码文件长度而不是解密文件长度,这可能会有所不同。您可以尝试完全省略Content-Length
标头,看看是否有效(这将导致使用分块编码)。