我有一个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版本。
答案 0 :(得分:0)
在这段代码中:
await imagemin(
[`tmp/${fileSlug}.${fileType}`],
'/tmp',
{ use: [ imageminWebp({quality: 50})] });
看起来你构建的tmp文件字符串与构建tmpFilePath
时的字符串不同。它缺少领先的斜线。你有什么理由不使用它吗?
await imagemin(
[tmpFilePath],
'/tmp',
{ use: [ imageminWebp({quality: 50})] });