Я пытаюсь сделать простую функцию, которая изменяет размер вновь загруженного изображения в хранилище. Я использую следующее, чтобы помочь мне сделать это:
import { tmpdir } from 'os';
import { join, dirname } from 'path';
import * as sharp from 'sharp';
import * as fs from 'fs-extra';
Когда этот код выполняется:
await bucket.file(filePath).download({
destination: tmpFilePath
});
Я получаю следующее сообщение об ошибке в журналах Google Cloud Function:
Ошибка: ENOENT: нет такого файла или каталога, откройте «/tmp/images/1542144115815_Emperor_penguins.jpg» при ошибке (собственная)
Вот полный код [сегмента]:
const gcs = admin.storage();
const db = admin.firestore();
import { tmpdir } from 'os';
import { join, dirname } from 'path';
import * as sharp from 'sharp';
import * as fs from 'fs-extra';
export const imageResize = functions.storage
.object()
.onFinalize(async object => {
console.log('> > > > > > > 1.3 < < < < < < <');
const bucket = gcs.bucket(object.bucket);
console.log(object.name);
const filePath = object.name;
const fileName = filePath.split('/').pop();
const tmpFilePath = join(tmpdir(), object.name);
const thumbFileName = 'thumb_' + fileName;
const tmpThumbPath = join(tmpdir(), thumbFileName);
console.log('step 1');
// Resizing image
if (fileName.includes('thumb_')) {
console.log('exiting function');
return false;
}
console.log('step 2');
console.log(`filePath: ${filePath}`);
console.log(`tmpFilePath: ${tmpFilePath}`);
await bucket.file(filePath).download({
destination: tmpFilePath
});
console.log('step 3');
await sharp(tmpFilePath)
.resize(200, 200)
.toFile(tmpThumbPath);
await bucket.upload(tmpThumbPath, {
destination: join(dirname(filePath), thumbFileName)
});
ОБНОВЛЕНИЕ 1 : добавлено await fs.ensureDir(tmpFilePath);
для обеспечения существования пути к файлу. Теперь получаю новую ошибку:
Ошибка: EINVAL: недопустимый аргумент, откройте «/tmp/images/1542146603970_mouse.png» при ошибке (собственный)
ОБНОВЛЕНИЕ ОБНОВЛЕНО 2 : добавлено решение как Ответ ниже.