在Cloud Functions for Cloud Functions中使用imagemin

时间:2017-06-01 23:31:15

标签: firebase google-cloud-functions

我有一个Firebase的云功能,它在存储桶上触发写:

exports.convertToWebP = functions.storage.object().onChange(async event => {
    const path = event.data.name;
    const [pictureSlug, fileName] = path.split('/');
    const [fileSlug, fileType] = fileName.split('.');

    // Download the file
    const tmpFilePath = `/tmp/${fileSlug}.${fileType}`;

    const file = bucket.file(path);
    await file.download({ destination: tmpFilePath });

    await imagemin(
          [`tmp/${fileSlug}.${fileType}`], 
          '/tmp',
          { use: [ imageminWebp({quality: 50})] });

    const destination = `${pictureSlug}.webp`;
    await bucket.upload(tmpFilePath, { destination });

我遇到的问题是,当我在存储对象上调用.download方法时,它会转到/ tmp /文件夹,但我不能在我的生活中弄明白如何获取imagemin抓取文件。

它可能与我构建路径的方式有关,或者它可能是像Cloud Functions不支持imagemin的其他东西。

我这样做的原因是因为ImageMagick的本地实例不支持webp。

另外:这个文件是.ts文件,我正在使用typescript编译器来创建它的js文件。它编译成ES5版本。

1 个答案:

答案 0 :(得分:0)

在这段代码中:

await imagemin(
      [`tmp/${fileSlug}.${fileType}`], 
      '/tmp',
      { use: [ imageminWebp({quality: 50})] });

看起来你构建的tmp文件字符串与构建tmpFilePath时的字符串不同。它缺少领先的斜线。你有什么理由不使用它吗?

await imagemin(
      [tmpFilePath], 
      '/tmp',
      { use: [ imageminWebp({quality: 50})] });