基本上我有一个使用Canvas创建的图像,它在base64编码的数据URI中。然后将此数据URI附加到电子邮件中。
...,
attachments:[{
fileName: "cat.jpg",
contents: new Buffer(cat, 'base64')
}],
收到电子邮件但附件无法查看。在linux中运行$ file cat.jpg
返回:
cat.jpg: ASCII text, with very long lines, with no line terminators
为什么这个ASCII?我已经提到过base64了。我该如何解决这个问题? 谢谢。
答案 0 :(得分:3)
变量cat
可能包含'数据:image / jpeg; base64,' 部分。您不应该将该位传递给Buffer
构造函数。
如果您传递了无效数据,new Buffer()
似乎没有抱怨:
var pixel = "data:image/gif;base64,"
+ "R0lGODlhAQABAIABAP///wAAACH5"
+ "BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
var buffer = new Buffer(pixel, "base64"); // does not throw an error.
您甚至可以找回有效的缓冲区。缓冲区是一个损坏的图像(或者说,它不是以图像标题开头)。
您必须自己剥离数据URI的第一部分:
var buffer = new Buffer(pixel.split("base64,")[1], "base64");
答案 1 :(得分:2)
不需要缓冲区。您可以将字符串从base64编码前缀后面开始放入其中:
var cat = "...base64 encoded image...";
var mailOptions = {
...
attachments: [
{ // encoded string as an attachment
filename: 'cat.jpg',
content: cat.split("base64,")[1],
encoding: 'base64'
}
]
};
您可以在此处找到更多详细信息:https://github.com/nodemailer/nodemailer#attachments
答案 2 :(得分:2)
您只需使用包nodemailer-base64-to-s3
。
安装包:
npm install -s nodemailer-base64-to-s3
使用nodemailer配置它:
var base64ToS3 = require('nodemailer-base64-to-s3');
var nodemailer = require('nodemailer');
var transport = nodemailer.createTransport({});
transport.use('compile', base64ToS3(opts));
答案 3 :(得分:2)