nodejs 编码为 base64 字符串不起作用

问题描述

我正在尝试将日历事件作为 (.ics) 中的附件 nodejs 文件发送。

我正在使用 ical-generator 库来创建事件。

下面的代码正在生成一个 .ics 文件并将其与电子邮件一起附加,但文件始终为空。

我不确定为什么事件内容没有转换为 base64。当我记录转换后的内容时,它显示相同的内容(不转换为 base64)

const cal = ical({ domain: "github.com",name: "my first iCal" });
// overwrite domain
cal.domain("example.net");

cal.createEvent({
  start: moment(),end: moment().add(1,"hour"),summary: "Example Event",description: "It works ;)",location: "my room",url: "http://example.net/",});

 console.log('result :',cal.toString("base64"));
    // result : 
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//example.net//ical-generator//EN
NAME:my first iCal
X-WR-CALNAME:my first iCal
BEGIN:VEVENT
UID:000-tnmyae@example.net
SEQUENCE:0
DTSTAMP:20210403T212902Z
DTSTART:20210403T212902Z
DTEND:20210403T222902Z
SUMMARY:Example Event
LOCATION:my room
DESCRIPTION:It works \;)
URL;VALUE=URI:http://example.net/
END:VEVENT
END:VCALENDAR

 var message = {
      html: emailBody,subject: "test",from_email: "from email",from_name: "sender name",to: [
        {
          email: "receiver email",},],tags: ["test"],attachments: [
        {
          type: "text/calendar",content: cal.toString("base64"),name: "fileName.ics",};

我发现这个编码为来自另一个线程的 base64 内容,它工作得很好。 "QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KUFJPRElEOi0vL01lZXRlci9tZWV0ZXIvL05PTlNHTUwgdjEuMC8vRU4NCkNBTFNDQUxFOkdSRUdPUklBTg0KTUVUSE9EOlJFUVVFU1QNCkJFR0lOOlZFVkVOVA0KRFRTVEFSVDoyMDE0MTAxOFQyMDMwMDBaDQpEVEVORDoyMDE0MTAxOFQyMTAwMDBaDQpVSUQ6MjAxNDEwMTVUMDAyODEzLTIyMzc4ODg2OEBtZWV0ZXIuY29tDQpEVFNUQU1QOjIwMTQxMDE0VDIxMjgxM1oNCk9SR0FOSVpFUjtDTj0ic25hZ2dzQGdtYWlsLmNvbSI7U0VOVC1CWT0iTUFJTFRPOnNvbWVhcHBAZ21haWwuY29tIjtMQU5HVUFHRT1zZTpNQUlMVE86c25hZ2dzQGdtYWlsLmNvbQ0KQVRURU5ERUU7Q1VUWVBFPUlORElWSURVQUw7Uk9MRT1SRVEtUEFsvelDSVBBTlQ7UEFSVFNUQVQ9TkVFRFMtQUNUSU9OO1JTVlA9VFJVRTtDTj1GZXNzeSBNO1gtTlVNLUdVRVNUUz0wOk1BSUxUTzpzbmFnZ3MyQGdtYWlsLmNvbQ0KREVTQ1JJUFRJT046ZGRkZCBtYW5kcmlsbA0KTE9DQVRJT046ZGRkZGRkIG1hbmRyaWxsDQpTVU1NQVJZOkNhbiBJIGxheSBsb3c/IENvb2sgc29tZSB5YXkteW8gMg0KVFJBTlNQOk9QQVFVRQ0KU0VRVUVOQ0U6MA0KU1RBVFVTOkNPTkZJUk1FRA0KRU5EOlZFVkVOVA0KRU5EOlZDQUxFTkRBUg=="

如果我尝试使用上面编码的字符串,我的日历事件就可以正常工作。 file.ics 也可以正常工作.. 所以我的猜测是将该事件内容转换为 base64 时出现问题。

解决方法

ical-generator 包的日历类不提供以格式作为参数的 toString(),例如 Buffer。您只需要将其转换为 Base 64,就像转换任何其他字符串一样。

const calStr = cal.toString()
const calB64 = Buffer.from(calStr).toString('base64')
console.log('result :',calB64);