无法得到这个'转换' cloud functions命令运行

时间:2018-02-15 14:05:52

标签: firebase google-cloud-functions child-process imagemagick-convert

这个firebase函数应该在/test/testfile.pdf中获取pdf,将其转换为灰色并将其保存在某处。我想在一个更复杂的过程中使用这个功能,但是exec(' convert')实际上并没有帮助我。

问题是' exec'命令一直失败。在shell中,您在此处看到的确切命令行正在运行:

  

convert -colorspace GRAY -density 300 test / testfile.pdf /tmp/out.pdf

日志中的错误是:

  

{ChildProcessError:命令失败:转换-colorspace GRAY -density 300 test / testfile.pdf /tmp/out.pdf转换:没有图像定义`/tmp/out.pdf' @ error / convert.c / ConvertImageCommand / 3210。 `convert-colorspace GRAY -density 300 test / testfile.pdf /tmp/out.pdf \`(在错误代码1中退出)回调(/user_code/node_modules/child-process-promise/lib/index.js:33: 27)在ChildProcess.exithandler(child_process.js:205:5)的emitTwo(events.js:106:13),在childProcess.emit(events.js:191:7)的maybeClose(internal / child_process.js:920: 16)在Process.ChildProcess._handle.onexit(internal / child_process.js:230:5)name:' ChildProcessError',code:1,childProcess:{ChildProcess:{[Function:ChildProcess] super_:[对象]},fork:[Function],_ forkChild:[Function],exec:[Function],execFile:[Function],spawn:[Function],spawnSync:[Function:spawnSync],execFileSync:[Function:execFileSync], execSync:[功能:execSync]},stdout:'',stderr:'转换:没有图像定义`/tmp/out.pdf\' @ error / convert.c / ConvertImageCommand / 3210。\ n' }

这是功能:

const functions = require('firebase-functions');
const rp = require('request-promise');
const request = require('request');
const baseURL = "https://www.google.com/cloudprint/"

const exec = require('child-process-promise').exec;
const mkdirp = require('mkdirp-promise');
const path = require('path');
const os = require('os');
const fs = require('fs');

exports.convertPDF = functions.https.onRequest((req, res) => {

  const tempLocalThumbFile = path.join(os.tmpdir(), "out.pdf");

  try {
   let tempLocalFile  = "test/testfile.pdf"
   exec('convert -colorspace GRAY -density 300 test/testfile.pdf '+tempLocalThumbFile).then((a) => {

      console.log('Conversion created at', tempLocalThumbFile);

  }, function (err) { 
      console.log(err)
  })
  } catch(err) {
      console.log(err)
  }
})

我很困惑。如何使此转换在Firebase函数中工作?

1 个答案:

答案 0 :(得分:0)

实际上问题是@Nivco所说的:Cloud Functions缺少ghostscript包。已有要求making ghostscript package available的功能请求。您可以转到该链接并单击开始图标,以便在有新闻时收到电子邮件通知。

还有另一个StackoverFlow thread,其中提到了一个解决方法,包括自己获取gs二进制文件。