NodeJS编辑二进制文件而不是将文件返回给用户

时间:2016-01-19 16:59:57

标签: javascript node.js file stream

我有方法获取URL,我想读取二进制文件,编辑它(重写特定地址中的一些字节(跳过字节)),而不是我想将它返回给用户而不保存(更改)文件系统上的文件)。

我有这段代码来编辑文件,但我不想更改文件系统上的文件并将文件返回给用户(用户想要下载它)。

router.get('/downloadFile', function (req, res, next) {
    var id = req.query.id;
    var buf = new Buffer(id);
    var file = '/opt/file.exe';

    var filename = path.basename(file);
    var mimetype = mime.lookup(file);

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

    var wstream = fs.createWriteStream(file, {flags: 'w', encoding: 'binary'});
    wstream.once('open', function(fd) {
        wstream.write(file, buf, 5262720, buf.length, );
        wstream.end();
       // here i want to send file to user
    });
});

更新 上面的代码片段实时编辑文件系统上的文件。因此,当我打开写入流并执行写入操作时 - 此更改会立即应用于文件系统上的文件。我已经找到了这样做我想要的方式,现在我问 - 这是正确的方式吗?

var content = fs.readFileSync(file);
var cnt = 5262720;
for (var i = 0; i < buf.length; i++) {
    content[cnt] = buf[i];
    cnt++;
}

res.end(content);

1 个答案:

答案 0 :(得分:0)

只需发送内容,无需保存文件。

使用此代码段,用户将从浏览器下载文件。

DownloadManager