我正在尝试使用 Node.js 处理二进制文件。
我正在尝试从客户端接收二进制文件,打开二进制文件,转换为十六进制,替换数据并将新的二进制文件返回给客户端。
app.use('/read-binary-file',(req,res) => {
try {
let content = fs.readFileSync(file_path);
console.log('content', content)
res.status(200).send({content})
}
catch(err) {
console.error(err);
}
})
我编写了获取现有文件并尝试读取它的代码。当我打印它时,我在缓冲区中得到这个:
content <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... >
我不确定如何将它转换为十六进制然后尝试更改它... 当我通过在线十六进制编辑器读取文件时,每行 16 位,这种方式非常舒服。
我有一些问题:
- 如何将二进制转换为十六进制?
- 如何替换十六进制文件中的数据,然后返回给客户端?
- 如何在代码中将它们显示为 16 位?
- 将它们存储在数据库中的最佳方式是什么?存储文件然后 在数据库中只存储路径?
是否有任何文档可以提供帮助?
最佳答案
二进制转十六进制:
const file = fs.readFileSync("./test"); const str = file.toString("hex");
替换数据返回给客户端:
let newStr = str.replace( "00", "FF" ); let buffer = Buffer.from( newStr, "hex" );
以 16 位显示:
for ( let i = 0; i < newStr.length; i+=16 ){ console.log( newStr.slice( i, i+16 ) + "\n" ); }
将文件保存在可写的上传文件夹中,并将上传文件的URL路径保存在数据库中。这是我的建议,根据我的经验。您可以在这篇 Quora 帖子中阅读有关是否要选择将图像存储在数据库中(以 BLOB 格式)的更多信息: Is it a bad design to store images as blobs in a database?
以下是可能对您有所帮助的基本设置:
/测试
ABC
/app.js
const express = require('express');
const app = express();
const fs = require('fs');
app.use("/test", (req, res) => {
const file = fs.readFileSync("./test"); // Read file as binary
const str = file.toString("hex"); // Convert to hexadecimal
let newStr = str.replace(/41|43/g, "42"); // Replace hexadecimal characters
let buffer = Buffer.from(newStr, "hex"); // Create buffer from hexadecimal
// Send to the user as download
res.setHeader('Content-disposition', 'attachment; filename=test-edited.txt');
res.setHeader('Content-type', 'text/plain');
res.charset = 'UTF-8';
res.write(buffer);
res.end();
});
app.listen(3000, () => console.log('Server Running...'));
测试文件包含字符 ABC。它们被转换为 BBB,然后被下载。
您可以通过设置适当的文件名和MIME type来选择输出不同的文件类型。 (内容类型),例如用于下载 PNG图片:
res.setHeader('Content-disposition', 'attachment; filename=output.png');
res.setHeader('Content-type', 'image/png');
注意:对于直接二进制操作,无需中间的十六进制转换,请参见 Christos Lytras' answer .
关于javascript - 在 Node.js 中更新二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60243428/