Как очистить временные файлы в Firebase Cloud Functions - PullRequest
1 голос
/ 24 мая 2019

Я пытаюсь обработать два разных изображения с одним и тем же именем (и это не подлежит обмену) с помощью облачных функций.Функция запускается для обработки только изображения и того же случая для второго изображения.Проблема в том, что я не могу удалить временные файлы, поэтому второе изображение не может быть сохранено, потому что оно имеет тот же путь и то же имя.Я использую fs.unlinkSync(), чтобы очистить временную папку, но это не работает.Это код:

exports.thumb= functions.database.ref('/{uid}/upload')

.onUpdate(async (change, context) => {


const fileName = "RawImage.jpg";
const userId = context.auth.uid;
const bucket = storage.bucket("-----");
const workingDir = path.join(os.tmpdir(), "thumbs");
const tempFilePath = path.join(workingDir, fileName);
const filePath = path.join(userId,fileName);

await fs.ensureDir(workingDir);

await bucket.file(filePath).download({destination: tempFilePath});

const thumbFileName = `thumb_${fileName}`;
const thumbFilePath = path.join(userId, thumbFileName);
const out = path.join(workingDir, thumbFileName);


const uploadPromises = async () => {

  await sharp(tempFilePath)
        .resize(300, 200)
        .grayscale()
        .toFile(out);

  return await bucket.upload(out, {
            destination: thumbFilePath,
        });

  }

    const v = await uploadPromises();


    return fs.unlinkSync(workingDir);

  });

Последняя строка предназначена для очистки рабочего каталога, в котором хранятся временные файлы, но это не работает (при обработке второго изображения всегда возвращается первое изображение).Я пытался даже fs.unlincSync() файлы сигл, но не работает.

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Почему бы не использовать fs.remove (out) вместо fs.unlinkSync (workingDir)?Я предполагаю, что вы используете https://www.npmjs.com/package/fs-extra

onUpdateCallback(change, context) {
    ... // The other code
    const out = path.join(workingDir, thumbFileName);

    const uploadPromises = async () => {
        await sharp(tempFilePath).resize(300, 200).grayscale().toFile(out);

        return await bucket.upload(out, {destination: thumbFilePath});
    }

    const v = await uploadPromises();
    // return fs.unlinkSync(workingDir);
    return fs.remove(out); // Why not this instead?
}
0 голосов
/ 24 мая 2019

fs.unlinkSync() работает только с отдельными файлами. Это не работает на целых каталогах. Вы называете это для типа каталога, но это не сработает.

У вас есть много вариантов удаления всего каталога. В этом вопросе перечислены некоторые из ваших вариантов: Удалить каталог, который не является пустым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...