Node-webshot - 图像不在服务器上生成,但相同的代码在本地生成图像

时间:2016-08-26 17:13:00

标签: node.js amazon-s3 sails.js

我在我的节点(sails js)项目上使用webshot将HTML字符串转换为图像,然后将该图像上传到S3存储桶。当我在我的本地机器上运行它,它工作正常,但它生成一个图像,我能够将该图像上传到s3桶。但是当我在EC2实例(Ubuntu 16)上运行相同的代码时,它不起作用。它不会创建任何图像,因此不会上传任何内容。

这是我的代码 -

var htmlString = '<div>a long html string</div>';
webshot(htmlString,'img.png', options, function(err) {
fs.readFile('img.png', function (err, data){
   if(err){
     console.log('error reading file');
   }else{
     var params = {
            Bucket: bucket,
            Key: 'customPNGs/'+'img.png',
            Body: data,
            ACL: 'public-read',
            ContentType: 'image/png'
     };
     s3.putObject(params, function (err, res) {
       if (err) {
          sails.log.error("Error uploading data: ", err);
     } else {
          console.log('uploaded')                  
     }
  });
}
});

我尝试使用流直接上传到S3,但它上传了一个0kb的文件。这是我使用流的代码 -

var renderStream = webshot(quitImageHTML, null, options);
var ss = '';
renderStream.on('data', function(data) {
  ss+=data.toString('binary');
});
renderStream.on('end', function() {
    //upload using the above code
});

1 个答案:

答案 0 :(得分:4)

所以似乎webshot在内部使用phantomjsphantomjs有一个名为libfontconfig的秘密依赖关系,它在其文档和依赖关系部分中不存在。

https://github.com/ariya/phantomjs/issues/10904

一旦我安装了依赖项,它就开始工作了。