从res.end(data,'binary')创建文件会使文件损坏

时间:2018-10-30 10:59:54

标签: node.js sendgrid-api-v3

在我们的应用程序中,使用一个API中的“ excel-export”模块创建了一个excel。

var file = fs.createWriteStream('abc.xlsx');
var options1 = { method: 'GET',
        url: <api url>,
        encoding: 'binary'
        };    
request(options1, function (error, response, body) {
    if (error) throw new Error(error);    
    response.pipe(file);        
    var avi = JSON.stringify(file);
    var buff = new Buffer.from(avi).toString('base64');
    var options = { method: 'POST',
                url: 'https://api.sendgrid.com/v3/mail/send',
                headers:
                    { 'content-type': 'application/json',
                      'authorization': <####> },
                body:
                    { personalizations:
                        [ { to: <####>,
                        subject: <#####> ],
                        from: <####>,
                        content: <####>,
                        attachments: [ { content: buff, filename: 'abc.xlsx' } ] },
                        json: true };
request(options, function (error, response, body) {
  if (error) throw new Error(error);
  console.log(body);
});
});

我正在另一个API中使用该API,该Excel文件必须作为附件发送到邮件中。我们正在使用Sendgrid v3 REST API进行邮件发送。

left join i3.analisys a3 WITH a3.something = :someValue

正在发送邮件,但是当我尝试打开Excel时,它给出了文件已损坏的错误。我要去哪里错了?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。诀窍在于使用encoding:null而不是encoding:'binary'。也代替

response.pipe(file);        
var avi = JSON.stringify(file);
var buff = new Buffer.from(avi).toString('base64');

我用过

var buff = new Buffer.from(body).toString('base64');