NodeJS编辑二进制文件比将文件返回给用户
NodeJS edit binary file than return file to user
我有方法获取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")
相关文章:
- CKFinder 3为所选文件返回错误的URL
- 使用ajax上传的文件返回错误,但使用c#在asp.net的服务器端正常提交的文件
- 通过AJAX发送文件返回'blob'错误
- NodeJS FS 不从多个文件返回数据
- AngularJS $http GET 请求到本地 JSON 文件返回语法错误:意外令牌]
- 文件在目录中,但isDirectory()为文件返回false
- 如何在 .ajax jquery 中从 php 文件返回值
- 如何通过 AJAX 从 PHP 文件返回 JavaScript
- 如何在 angularjs 工厂中使用 json 文件返回对象数组
- 编写从 XML 文件返回数据的搜索字段脚本
- 从外部 js 文件返回样式表
- 从单独的文件返回 AJAX 响应文本
- 从读取文件返回未定义
- NodeJS编辑二进制文件比将文件返回给用户
- 使用JQuery从JSON文件返回数组
- ajax调用不会从外部JS文件返回数据
- 无法使用AngularJS中的HTTP get调用从JSON平面文件返回结果
- 使用AJAX将Javascript字符串发送到PHP文件,然后从文件返回数组
- 如何将Javascript对象传递给php以进行sql查询,并将数据作为下载的csv文件返回
- 搜索文本文件返回一个数字