2015-12-30 96 views
2

使用jspdf我在客戶端(AngularJS)生成了pdf文件。我能夠成功下載該文件。現在我有另一個功能將pdf via email發送到用戶的電子郵件地址。我們可以將PDF文件從AngularJS客戶端發送到NodeJS服務器

問題:

當用戶點擊send email按鈕,我使用jspdf創建的PDF應該被上傳到服務器,並在那裏我應該能夠重視我得到了來自客戶的電子郵件中PDF文件。是否有可能這樣做?我不確定我們是否可以做到這一點。

我們可以將var doc = new jsPDF('p', 'pt');中的doc對象發送到nodejs然後渲染它並最終附加到電子郵件?

如果上述任務不可行,請讓我知道其他可能性。我想用nodemailer發送郵件。

+0

您可以使用[FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData)API –

+0

@rahilwazir通過AngularJS發送文件但是文件是否在相同的格式..我的意思是在這種情況下發送到服務器後的PDF? – Amarnath

+0

是相同的格式 –

回答

2

我已經爲客戶端和服務器端代碼分配了一個示例代碼,並進行了完美測試和工作。請根據您的需要進行修改。

服務器端:託管CLOUD9測試 - 因此,它需要通過process對象由供應商提供的公網IP和端口。根據您的託管環境更改偵聽器。

注:請閱讀在線評論爲更好地理解

var express = require('express'); 
var app = express(); 
var fs = require('fs'); 
var bodyParser = require('body-parser'); 
var formidable = require('formidable'), 
form = new formidable.IncomingForm(); 

app.post("/", function(req, res, next) { 
    form.parse(req, function(err, fields, files) { 
     console.log("File received:\nName:"+files.pdf.name+"\ntype:"+files.pdf.type); 
    }); 

    form.on('end', function() { 
     /* this.openedFiles[0].path -- object Contains the path to the file uploaded 
     ------- Use NodeMailer to process this file or attach to the mail-----------------*/ 
     console.log("PDF raw data:"+ fs.readFileSync(this.openedFiles[0].path, "utf8")); 
     res.status(200).send("thank you"); 
    }); 
}) 
.listen(process.env.PORT, process.env.IP, function() { 
    console.log('Server app listening'); 
}); 

客戶端:Fiddler

注:我沒貼imgData爲SO有字符限制。請參閱fiddler鏈接以獲取客戶端代碼。將請求URL更改爲您的服務器。客戶端使用Blob API,這是一個HTML5標準。所以請在兼容HTML5的瀏覽器上進行測試。

var imgData = [[**Copy the same image provided by JSpdf example. Check the fiddler for complete code**]] 

var doc = new jsPDF(); 
doc.setFontSize(40); 
doc.text(35, 25, "Octonyan loves jsPDF"); 
doc.addImage(imgData, 'JPEG', 15, 40, 180, 180); 

var data = new Blob([doc.output()], { 
    type: 'application/pdf' 
}); 

var formData = new FormData(); 
formData.append("pdf", data, "myfile.pdf"); 
var request = new XMLHttpRequest(); 
request.open("POST", "https://saltjs-nirus.c9.io"); // Change to your server 
request.send(formData); 

參考文獻:

+0

upvote ..我試試這個。 – Amarnath

+0

請務必檢查實施Blob API – Nirus

+0

Sry的現代瀏覽器是否有遲到的響應。我在發送電子郵件時遇到了一些問題。 儘管PDF中的圖像呈現存在一些問題,但文件上傳似乎仍在工作。圖像在黑白中變得模糊。除此之外的其他數據是完整的。關於這個問題的想法? – Amarnath

相關問題