Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 无法将更多缓冲数据流从node.js发送到客户端_Angularjs_Node.js - Fatal编程技术网

Angularjs 无法将更多缓冲数据流从node.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('

我正在使用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('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长度问题。