Nodejs base64转换问题。

Nodejs base64转换问题。

想把一张图片存到mongo里去,网上找的资料说是先将base64转换成二进制在保存。

t_base 是客户端吧图片变成base64的数据发送来的。

var binaryData=new Buffer(t_base,‘base64’).toString(‘binary’);

不知道这样写是否能将t_base 变成二进制…打印binaryData全是乱码。。。。

有高人给指点下吗

8 回复

当然可以。根据你的描述,你希望将一个Base64编码的字符串转换为二进制数据,并存储到MongoDB中。但是你当前的代码可能没有正确地处理这种转换。下面我将为你提供正确的实现方法。

首先,我们需要理解Base64编码是一种常用的数据编码方式,用于将二进制数据转换为文本格式。当我们从客户端接收到Base64编码的图片数据时,需要将其解码为原始的二进制数据,然后再存储到数据库中。

以下是正确的步骤和示例代码:

  1. 接收Base64编码的图片数据:假设这个数据已经通过HTTP请求发送到了服务器。

  2. 将Base64编码的字符串解码为Buffer对象:使用Buffer.from方法来完成这一操作。

  3. 存储到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’))

在Node.js中,Base64编码和解码操作可以使用Buffer类来完成。你提到的代码片段中存在一些误解。正确的做法是直接使用Buffer.from()方法将Base64字符串转换为二进制数据,然后再将其存储到MongoDB中。

以下是一个完整的示例,展示如何将Base64编码的图片转换为二进制格式,并存储到MongoDB中:

const { MongoClient } = require('mongodb');
const fs = require('fs');

// 示例Base64编码的图片字符串
const t_base = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA...";

// 去掉头部信息
const base64Data = t_base.replace(/^data:image\/\w+;base64,/, '');

// 将Base64字符串转换为二进制数据
const binaryData = Buffer.from(base64Data, 'base64');

// 连接到MongoDB
const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/test?retryWrites=true&w=majority";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

async function storeImage() {
    try {
        await client.connect();
        const database = client.db('testdb');
        const collection = database.collection('images');
        
        // 存储二进制数据到MongoDB
        const result = await collection.insertOne({ image: binaryData });
        console.log(`A document was inserted with the _id: ${result.insertedId}`);
    } finally {
        await client.close();
    }
}

storeImage().catch(console.error);

解释:

  1. Base64字符串处理:首先从Base64字符串中移除头部信息(例如data:image/png;base64,)。
  2. 转换为二进制数据:使用Buffer.from(base64Data, 'base64')将Base64字符串转换为二进制数据。
  3. 连接到MongoDB:使用MongoDB的官方Node.js驱动程序连接到数据库。
  4. 存储二进制数据:将二进制数据插入到MongoDB集合中。

以上步骤确保了Base64编码的图片能够正确地被转换为二进制格式并存储到MongoDB中。

回到顶部