NodeJS编辑二进制文件比将文件返回给用户

NodeJS edit binary file than return file to user

本文关键字:文件 返回 给用户 编辑 二进制文件 NodeJS      更新时间:2023-09-26

我有方法获取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);

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

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

var http = require("http");
var fs = require("fs");
    http.createServer(function(req, res) {
            res.setHeader('Content-disposition', 'attachment; filename=file.exe');
            res.setHeader('Content-type', 'application/x-msdownload');
            //Your logic here...
            res.end(content); //The modified file content.
    }).listen("8080", "0.0.0.0")