我的Express应用程序正在从浏览器中接收base64编码的PNG(使用toDataURL()从画布生成)并将其写入文件。但是该文件不是有效的图像文件,因此“文件”实用程序只是将其标识为“数据”。
var body = req.rawBody,
base64Data = body.replace(/^data:image\/png;base64,/,""),
binaryData = new Buffer(base64Data, 'base64').toString('binary');
require("fs").writeFile("out.png", binaryData, "binary", function(err) {
console.log(err); // writes out file without error, but it's not a valid image
});
我认为您正在转换的数据比您需要的更多。一旦使用正确的编码创建了缓冲区,您只需要将缓冲区写入文件即可。
var base64Data = req.rawBody.replace(/^data:image\/png;base64,/, "");
require("fs").writeFile("out.png", base64Data, 'base64', function(err) {
console.log(err);
});
new
Buffer(…,’base64’)通过将输入解释为base64编码的字符串,将输入字符串转换为Buffer,它只是字节数组。然后,您可以将该字节数组写入文件。
如评论中所述,req.rawBody
已不再是一回事。如果使用express
/
connect
,则应使用bodyParser()
中间件并使用req.body
,并且如果使用标准Node进行此操作,则需要聚集传入的data
事件Buffer
对象,并在end
回调中进行此图像数据解析。
问题内容: 我正在为Firefox / IE构建一个开放式搜索附加组件,并且该图像需要经过Base64编码,因此如何对我拥有的收藏夹图标进行64位编码? 我只熟悉PHP 问题答案: 据我记得,图像数据有一个xml元素。您可以使用此网站对文件进行编码(使用上载字段)。然后,只需将数据复制并粘贴到XML元素即可。 您也可以这样使用PHP来做到这一点: 使用Mozilla指南获取有关创建OpenSear
问题内容: 我已经使用JavaScript 将源内容从html标记转换为base64String。图像显示清晰。现在,我想使用javascript将该图像保存到用户磁盘。 当我将图像路径设置为html标签的源代码时,此代码效果很好。但是,当我将source传递为base64String时不起作用。 如何实现我想要的? 问题答案: 仅允许用户下载图像或其他文件,您可以使用HTML5 属性。 静态文件
我想采取一个当前的base64编码的图像,并使用一个简短的哈希说“84dskh”,以“加密”的图像到另一个完全有效的base64编码图像。 原始图像不必经过base64编码,最终我想要原始图像的加密图像,但它仍然是一个可以在img标记中显示的有效图像:。 最好使用JavaScript。
问题内容: 我的NodeJS服务器收到一个图片,编码为base64。 收到的数据应另存为jpg。因此,我使用了Buffer和FileSystemWriter: fs.writeFile不会调用错误。jpeg文件已保存,但无法打开。图像查看器说: 原始文件大6kb,新文件大7kb。 问题答案: 您必须从其中剥离url元信息。(重申@CBroe所说的)这是一个小函数,用于从输入字符串返回正确的信息。
问题内容: 我一直在尝试处理将发布到nodeJS(和express框架)的图像保存到数据库中,并且遇到了一些麻烦。忽略所有的Web处理,我认为我已经将问题缩小到节点中base64编码发生的方式。我认为下面简化的示例应该可以工作,但是输出图像始终会损坏。 示例(1)在图像中加载(2)保存if()的副本,以确认节点可以正确读取文件。这始终有效。(3)拍摄图像,并对其内容进行base64编码,(4)然后