我们可以将AngularJS客户端的PDF文件发送到NodeJS服务器吗?

时间:2015-12-30 07:44:11

标签: javascript angularjs node.js pdf jspdf

使用jspdf我在客户端生成了<TextInput value={this.state.text} maxLength={4} /> 文件(AngularJS)。我能够成功下载该文件。现在我有另一个函数将pdf发送到用户电子邮件地址。

问题:

当用户点击pdf via email按钮时,我使用send email创建的pdf应该上传到服务器,在那里我应该能够将我从客户端获取的pdf文件附加到电子邮件中。是否可以这样做?我不确定我们是否可以这样做。

我们可以将jspdf中的doc对象发送到var doc = new jsPDF('p', 'pt');然后呈现它并最终附加到电子邮件中吗?

如果无法完成上述任务,请告诉我其他可能性。

P.S:我正在使用nodemailer发送电子邮件。

1 个答案:

答案 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);

<强>参考文献: