【发布时间】:2020-04-22 14:48:15
【问题描述】:
我正在尝试遍历文件夹中的所有图像,将其转换为 base64 并发送到 MongoDB。
我从一张图片开始,效果很好。
var filename = '1500.jpg';
var binarydata = fs.readFileSync(filename);
var converted = new Buffer(binarydata).toString("base64");
console.log(converted);
上面的代码给了我一个文件的base64。
我尝试更改代码,以便循环遍历我目录中的所有文件,并为每个文件提供 base64。 这是我写的,但没有用;
var variantfolder = './variantimages';
fs.readdir(variantfolder, function(err, files){
if (err) {
console.log(err);
}
else {
fs.readFileSync(files, function(err, res){
if (err){console.log('err')} else {
var converted = new Buffer(res).toString("base64");
var onevariant = {
"imagename":files,
"imagebase64":converted
}
var newvariant = new Variant(onevariant)
newvariant.save(err, newvar){
if (err) {
console.log('err');
}
else {
console.log('saved to mongo');
}
}
}
})
}
})
【问题讨论】:
-
files是一个数组,因此您应该使用files.forEach(function (file){....})循环遍历数组 -
你为什么要这样做!!?? MongoDB 支持二进制......这太疯狂了。
-
@brad 我不明白你。有一个系统将使用通过 API 作为 base64 传入的图像。大约有固定的一次 1000 张图像,我打算将其从本地主机转换为 base64,并提供一个调用 MongoDb 文档记录的 api,他们可以使用它。
-
Base64 编码增加了 33% 的存储开销,并且需要额外的内存和 CPU。它几乎从来没有真正必要。我不知道你为什么会有一个以 base64 格式发送图像的 API……还有很多其他方法可以使用这样的 API 发送二进制数据。您绝对不应该以这种方式将其存储在数据库中。完全浪费资源。
-
@mysamza 当您说“但它不起作用”时,您到底是什么意思?发生了什么,你看到了什么错误等等?
标签: javascript node.js express base64