2016-06-28 35 views
1

ファイルをディスクに保存せずにsendgridに添付しようとしています。ストリームを使ってそれを処理したいSendgridとMulterを使って電子メールにファイルを添付する方法

私はので、ストリームを使用して可能ではないと思います
var multer = require('multer'); 
    var upload = multer({ storage: multer.memoryStorage({})}); 
    mail = new helper.Mail(from_email, subject, to_email, content); 
    console.log(req.body.File); 
    attachment = new helper.Attachment(req.body.File); 
    mail.addAttachment(attachment) 
+0

問題が発生していますか? nodemailer.jsフレームワークを使用して電子メールを送信していますか?あなたは 'helper.Mail'コードを共有できますか?どの 'console.log(req.body.File);'が表示されますか? – danilodeveloper

+0

@danildeveloperによって要求されるように、より多くの情報/コードを提供できますか? – cviejo

答えて

3

  • multerBufferオブジェクト(ないStream)でメモリ上のMemoryStorage保存ファイル全体の内容
  • SendgridライブラリのdoesnのライブラリサポートReadable streams as input

しかし、あなたは次のように添付ファイルとして返さbufferを使用して、それを達成することができます:大きな添付ファイルや高同時実行で使用する場合には(メモリエラーのうちの)メモリ使用量に影響を与えて

var multer = require('multer') 
    , upload = multer({ storage: multer.memoryStorage({})}) 
    , helper = require('sendgrid').mail; 

app.post('/send', upload.single('attachment'), function (req, res, next) { 
    // req.file is the `attachment` file 
    // req.body will hold the text fields, if there were any 

    var mail = new helper.Mail(from_email, subject, to_email, content) 
    , attachment = new helper.Attachment() 
    , fileInfo = req.file; 

    attachment.setFilename(fileInfo.originalname); 
    attachment.setType(fileInfo.mimetype); 
    attachment.setContent(fileInfo.buffer.toString('base64')); 
    attachment.setDisposition('attachment'); 

    mail.addAttachment(attachment); 
    /* ... */ 
}); 

+0

ニース、私はそれをテストします!私は 'req.file'オブジェクトをループしても複数のファイルで動作すると思いますか? –

+0

バッファをbase64に変換する必要があります。それ以外の場合は、sharmのように動作します。D Thanks! 'attachment.setContent(fileInfo.buffer.toString( 'base64')); ' –

+0

ありがとうございます!この例で修正してください。 Bufferオブジェクトを扱う 'Attachment'オブジェクトを想定しましたが、そうではありません。 – Dario

関連する問題