【问题标题】:Convert base64 image to a file in Node Js将base64图像转换为Node Js中的文件
【发布时间】:2016-06-03 07:18:39
【问题描述】:

我是 Node Js 的新手。我需要包含用户的个人资料图片。我从 IOS 应用程序收到 base64 中的图像请求。我需要将它存储在 images 文件夹中,并将图像路径保存在 mongodb 数据库中。

我使用了以下代码,

var bitmap = new Buffer(req.body.profile_image, 'base64');
// write buffer to file
fs.writeFileSync("images/example.jpg", bitmap);

其中 req.body.profile_image 是 base64 图像。

我收到以下错误,

TypeError: First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.

req.body.profile_image 的值将是,

+MZScHeJQ9Cz5dfxnEmIMHWMZyZYnYx8Rrhj0HbtfGUanv5w3UHUyADbiGsKJxeM1yV4uGwBS7cYlAec1w0AX6xg2A1O854UF8OS6PAP1MtzkeFnrNlD41U8XFeGrp1fn3jRMUs8sqS61umSS2rR2NDhppjZ4OvnOWBAq6X+sQNkhKkfZOdYsZOpz8fWIQb6wQ/GchVCgfZko4PMDg1DSumausG6o+2E6wKLLjKReUaHEQXKJV8h85XEKN4p/WEBvTHmmJ/IN178YJVgrGmfOScAuBPp+sggGA7/wC1kgbDiacbGABOcCLHVRpMuBQh5Xn4xqARF03pwkJT23LhxGLiSGp8mCVWDrzPf3iwp4C3nDSg2VUfNwgDvm6vrIiFJvp8ZHIdjoFx8BX0OH0+8TVii3GAKKc2kjz7dYqUCdsuMOm2hrr+h//Z

请帮忙。

【问题讨论】:

  • fs.writeFileSync 不返回任何内容。它抛出一个错误对象。所以在 try-catch 中写 fs.writeFileSync(file, content, 'utf8');

标签: javascript node.js image mongodb


【解决方案1】:

编辑:这段代码对我有用。也许错误会在以后发生。

var fs = require("fs");
var image = "+MZScHeJQ9Cz5dfxnEmIMHWMZyZYnYx8Rrhj0HbtfGUanv5w3UHUyADbiGsKJxeM1yV4uGwBS7cYlAec1w0AX6xg2A1O854UF8OS6PAP1MtzkeFnrNlD41U8XFeGrp1fn3jRMUs8sqS61umSS2rR2NDhppjZ4OvnOWBAq6X+sQNkhKkfZOdYsZOpz8fWIQb6wQ/GchVCgfZko4PMDg1DSumausG6o+2E6wKLLjKReUaHEQXKJV8h85XEKN4p/WEBvTHmmJ/IN178YJVgrGmfOScAuBPp+sggGA7/wC1kgbDiacbGABOcCLHVRpMuBQh5Xn4xqARF03pwkJT23LhxGLiSGp8mCVWDrzPf3iwp4C3nDSg2VUfNwgDvm6vrIiFJvp8ZHIdjoFx8BX0OH0+8TVii3GAKKc2kjz7dYqUCdsuMOm2hrr+h//Z";
var bitmap = new Buffer(image, 'base64');
fs.writeFileSync("images/example.jpg", bitmap);

如果你说

console.log(req.body.profile_image) 

而不是

 console.log(typeof req.body.profile_image)

它会在打印之前将 req.body.profile_image 中的任何数据转换为字符串。您可能只是在评论时忘记了“typeof”,但如果您没有添加“typeof”,则无法确定它是否包含字符串。 Buffer 的构造函数不止一个,它可能使用了错误的构造函数。

对于 lolz 尝试:

Buffer.from(String.fromCharCode.apply(null, new Uint16Array(req.body.profile_image)), "base64")

什么被分配给 req.body.profile_image?

writeFileSync 的第一个参数是一个字符串,所以它不会导致类型错误。您能否更具体地了解 req.body.profile_image 中包含的内容?

附带说明,虽然我认为这与您的问题无关,但使用“new”关键字实例化 Buffer 是deprecated。 也许使用Buffer.from(...) 会让您朝着解决方案的方向前进。

【讨论】:

  • 请参阅req.body.profile_image 值的问题。
  • 那么它是base64字符串吗?例如“VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==”?如果是,则不应导致 TypeError。如果你说:console.log(typeof req.body.profile_image);,你会看到什么
  • 如果我使用 console.log(req.body.profile_image),我会得到字符串
  • 如果你尝试会发生什么:Buffer.from(req.body.profile_image, "base64")
  • 我刚刚运行了这段代码,它对我有用。我有一个包含数据的二进制文件。它虽然是格式错误的jpg。如果您尝试加载 jpg,可能稍后会发生错误。
猜你喜欢
  • 1970-01-01
  • 2022-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 2018-07-23
  • 2017-01-05
  • 1970-01-01
相关资源
最近更新 更多