Nodejs base64转换问题。
Nodejs base64转换问题。
想把一张图片存到mongo里去,网上找的资料说是先将base64转换成二进制在保存。
t_base 是客户端吧图片变成base64的数据发送来的。
var binaryData=new Buffer(t_base,‘base64’).toString(‘binary’);
不知道这样写是否能将t_base 变成二进制…打印binaryData全是乱码。。。。
有高人给指点下吗
当然可以。根据你的描述,你希望将一个Base64编码的字符串转换为二进制数据,并存储到MongoDB中。但是你当前的代码可能没有正确地处理这种转换。下面我将为你提供正确的实现方法。
首先,我们需要理解Base64编码是一种常用的数据编码方式,用于将二进制数据转换为文本格式。当我们从客户端接收到Base64编码的图片数据时,需要将其解码为原始的二进制数据,然后再存储到数据库中。
以下是正确的步骤和示例代码:
-
接收Base64编码的图片数据:假设这个数据已经通过HTTP请求发送到了服务器。
-
将Base64编码的字符串解码为Buffer对象:使用
Buffer.from
方法来完成这一操作。 -
存储到MongoDB:将解码后的Buffer对象直接存储到MongoDB中。
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017'; // MongoDB连接字符串
const dbName = 'mydatabase'; // 数据库名称
// 假设t_base是从客户端接收到的Base64编码的图片数据
let t_base = 'your-base64-encoded-string-here';
// 解码Base64字符串为Buffer对象
let binaryData = Buffer.from(t_base, 'base64');
// 连接到MongoDB
MongoClient.connect(url, function(err, client) {
if (err) throw err;
const db = client.db(dbName);
const collection = db.collection('images');
// 插入解码后的二进制数据到集合中
collection.insertOne({ image: binaryData }, function(err, result) {
if (err) throw err;
console.log("Image saved successfully");
client.close();
});
});
解释
Buffer.from(t_base, 'base64')
:这是关键的一步,它将Base64编码的字符串解码为Node.js的Buffer对象。Buffer对象可以直接表示二进制数据。- 在MongoDB中,可以直接存储Buffer对象,无需额外转换。
- 使用
insertOne
方法将解码后的图像数据插入到指定的集合中。
这种方法应该能够解决你遇到的问题,并且可以确保图片数据正确无误地存储到MongoDB中。
binary 格式不再支持了。
‘binary’ - A way of encoding raw binary data into strings by using only the first 8 bits of each character. This encoding method is deprecated and should be avoided in favor of Buffer objects where possible. This encoding will be removed in future versions of Node.
图片不大的话,可直接 base64 存。
var binaryData=new Buffer(t_base,‘base64’); 就是二进制编码了
var base64Data = data.replace(/^data:image/png;base64,/,""); //务必删除mine信息才能转化 require(“fs”).writeFile(“o.png”, base64Data, ‘base64’, function(err) { console.log(err); });
如果你需要ascii打印,可以用这种方法 console.log(new Buffer(“SGVsbG8gV29ybGQ=”, ‘base64’).toString(‘ascii’))
mark
mark