gpt4 book ai didi

node.js - 将 PDF 文件从 AngularJS 发送到 NodeJS

转载 作者:太空宇宙 更新时间:2023-11-03 22:16:56 25 4
gpt4 key购买 nike

我需要将 PDF 文件从 angularjs 客户端发送到 NodeJS 服务。我做了 angularjs 服务,当我收到文件时,它是一个像这样的字符串:

%PDF-1.3
3 0 obj
<</Type /Page
/Parent 1 0 R
/Reso

如何在 NodeJS 中将此字符串重新转换为 PDF?

这是客户端代码:

var sendByEmail = function () {
$scope.generatingPdf = true;
$('#budget').show();
var pdf = new JsPDF('p', 'pt', 'letter');
var source = $('#budget')[0];
pdf.addHTML(source, 0, 0, function () {
var resultPdf = pdf.output();
BillService.sendByEmail("rbrlnx@gmail.com", resultPdf).then(function () {

});
$('#budget').hide();
});
};

var sendByEmail = function (email, file) {
var deferred = $q.defer();
var data = {
email: email,
file: file
};
BillService.sendByEmail(data, function (result) {
deferred.resolve(result);
}, function () {
deferred.reject();
});

return deferred.promise;
};

服务器代码 Controller 为空:

 var sendByEmail = function (req, res, next) {

var file = req.body.file;

};

最佳答案

我不久前尝试过这个,然后我想出了这个。它还没有准备好投入生产,也许你会发现它很有用。它没有前端库(当然 Angular 除外),但假设您使用的是 Express 4x 和 body-parser。

结果:

在浏览器中:

enter image description here

在服务器上:

enter image description here

您所看到的内容:

您将看到一个微型 Node 服务器,提供静态 index.html 和 Angular 文件,以及一个 POST 路由,用于接收由 HTML FileReader API 提供的 Base64 格式的 PDF,并将其保存到磁盘。

您可以将其作为电子邮件附件发送,而不是保存到磁盘。例如,参见 herehere了解一些相关信息。

下面的示例假设用户通过文件输入上传 PDF,但对于将文档发送到后端系统的所有其他方式,其想法都是相同的。 最重要是将 pdf 数据作为 BASE64 发送,因为这是大多数文件编写器和电子邮件包使用的格式(例如,与直接的二进制文件相反......)。这也适用于图像、文档等。

我是怎么做到的:

在 HTML 中:

<div pdfs>Your browser doesn't support File API.</div>

名为 pdfs 的指令:

myApp.directive('pdfs', ['upload', function(upload) {
return {
replace: true,
scope: function() {
files = null;
},
template: '<input id="files" type="file">',
link: function(scope,element) {
element.bind('change', function(evt) {
scope.$apply(function() {
scope.files = evt.target.files;
});
});
},
controller: function($scope, $attrs) {
$scope.$watch('files', function(files) {
//upload.put(files)
if(typeof files !== 'undefined' && files.length > 0) {
for(var i = 0; i<files.length;i++) {
readFile(files[i])
}
}
}, true);

function readFile(file) {
var reader = new FileReader();
reader.addEventListener("loadend", function(evt) {
upload.post({name: file.name, data: reader.result})
})
if(reader.type = 'application/pdf') {
reader.readAsDataURL(file);
}
}
}
}
}]);

一个微小的服务:

myApp.service('upload', function($http) {
this.post = function(file) {
$http.post('/pdf', file);
}
});

还有一个 Node 服务器:

var express = require('express');
var bodyParser = require('body-parser')
var fs = require("fs");

var app = express();
app.use(express.static('.'));
app.use( bodyParser.json({limit: '1mb'}) );

app.post('/pdf', function(req, res){
var name = req.body.name;
var pdf = req.body.data;

var pdf = pdf.replace('data:application/pdf;base64,', '');

res.send('received');
fs.writeFile(name, pdf, 'base64', function(err) {
console.log(err);
});
});

var server = app.listen(3000, function() {
console.log('Listening on port %d', server.address().port);
});

关于node.js - 将 PDF 文件从 AngularJS 发送到 NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24551029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com