Я использую GM, пакет GraphicsMagick для Node.js для преобразования изображений в pdf на сервере и отправки их в Angular.js, передающем буферный поток, как так:Невозможно отправить больше буферизованных потоков данных от node.js к клиенту
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 (в зависимости от их размера).
На Угловом я расшифровать эти изображения с помощью этой услуги:
$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);
});
На контроллере:
window.open('data:application/pdf;base64,' + pdfData);
Когда предел превышен я получаю только пустую страницу и ничего другого.
Предложения: вы должен иметь возможность просто устанавливать заголовки, а затем 'stdout.pipe (res);' на стороне сервера, чтобы избежать буферизации. Вопрос: почему бы просто не открывать новое окно на клиенте, который вместо этого переходит к удаленной конечной точке? Таким образом, вы не столкнетесь с проблемами длины uri данных. – mscdex