Angularjs 无法将更多缓冲数据流从node.js发送到客户端
我正在使用GraphicsMagick for Node.js包GM将服务器上的图像转换为pdf,并通过缓冲流将图像发送到Angular.js,如下所示:Angularjs 无法将更多缓冲数据流从node.js发送到客户端,angularjs,node.js,Angularjs,Node.js,我正在使用GraphicsMagick for Node.js包GM将服务器上的图像转换为pdf,并通过缓冲流将图像发送到Angular.js,如下所示: var comm = gm().command('convert') for (page in pages) { comm.in('./docs/' + data.nomefile + '[' + pages[page] + ']') } comm.density(150, 150).compress('jpeg').stream('
var comm = gm().command('convert')
for (page in pages) {
comm.in('./docs/' + data.nomefile + '[' + pages[page] + ']')
}
comm.density(150, 150).compress('jpeg').stream('pdf', function(err, stdout, stderr) {
if (!err) {
var bufs = [];
stdout.on('data', function(chunk) {
bufs.push(chunk)
});
stdout.on('end', function() {
var buf = Buffer.concat(bufs).toString('base64');
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header('content-type', 'application/pdf');
res.send(buf)
})
不幸的是,我无法向客户端发送超过几个pdf页面(取决于它们的大小)
在Angular上,我使用此服务解码这些图像:
$http.get(baseUrl+imageUrl, {responseType: 'arraybuffer'}).
success(function(data) {
var pdfData=Base64Service.ConvertArrayBuffer(data);
cbk(pdfData);
}).
error(function(data, status) {
var err= 'Request failed with status: ' + status;
cbk(err);
});
createPdf: function(imageId, pagesArray) {
$http({
method: 'GET',
cache: false,
url: baseUrl + 'image/createPdf/',
params: {
id: imageId,
pages: JSON.stringify(pagesArray)
},
responseType: "arraybuffer"
}).success(function(pdfData) {
var file = new Blob([pdfData], { type: 'application/pdf' });
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
});
}
在控制器上:
window.open('data:application/pdf;base64,' + pdfData);
当超过限制时,我只得到一个空白页,没有其他内容。感谢建议,这就是我如何正确渲染所有图像的方法:
服务器端:
var comm = gm().command('convert')
for (page in pages) {
comm.in('./docs/' + data.nomefile + '[' + pages[page] + ']')
}
comm.density(150, 150).compress('jpeg').stream('pdf', function(err, stdout, stderr) {
if (!err) {
res.header('content-type', 'application/pdf');
stdout.pipe(res)
}
Client.js服务:
$http.get(baseUrl+imageUrl, {responseType: 'arraybuffer'}).
success(function(data) {
var pdfData=Base64Service.ConvertArrayBuffer(data);
cbk(pdfData);
}).
error(function(data, status) {
var err= 'Request failed with status: ' + status;
cbk(err);
});
createPdf: function(imageId, pagesArray) {
$http({
method: 'GET',
cache: false,
url: baseUrl + 'image/createPdf/',
params: {
id: imageId,
pages: JSON.stringify(pagesArray)
},
responseType: "arraybuffer"
}).success(function(pdfData) {
var file = new Blob([pdfData], { type: 'application/pdf' });
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
});
}
建议:您应该能够简单地设置标题,然后
stdout.pipe(res)服务器端的代码>以避免缓冲。问题:为什么不干脆在客户端上打开一个新窗口来导航到远程端点呢?这样您就不会遇到数据uri长度问题。