Обновление предварительного просмотра изображения в хранилище Firebase - PullRequest
0 голосов
/ 25 декабря 2018

У меня небольшая проблема с пожарной базой.Я создал простую систему загрузки, где пользователи моего приложения могут отправлять ваши фотографии.Система проста, пользователь отправляет изображение в хранилище, а приложение сохраняет URL в firestore, и я использую URL в своем приложении, чтобы показать изображение.Я улучшил систему, создав одну облачную функцию, чтобы внести некоторые коррективы в изображение.Проблема в том, что когда новая фотография загружается в хранилище и показывает старое, а не новое изображение, я не знаю, нужно ли мне что-то делать с кешем или другой конфигурацией.В приложении показывается новое изображение, а в firebase показывается старое изображение, есть ли какая-либо конфигурация для решения этой проблемы?

Вот мой код функции:

import * as functions from 'firebase-functions';
import * as Storage from '@google-cloud/storage';
import * as sharp from 'sharp';
import * as fs from 'fs-extra';
import { tmpdir } from 'os';
import { join, dirname } from 'path';

/* Variaveis Globais */
const gcs = new Storage();

/* Criando o metodo principal */
export const generateThumbs = functions.storage
    .object()
    .onFinalize(async object => {

        /* Instanciando as constantes */
        const bucket = gcs.bucket(object.bucket);
        const filePath = object.name;
        const contentType = object.contentType;
        const fileName = filePath.split('/').pop();
        const bucketDir = dirname(filePath);
        const customMetadata = object.metadata;

        /* Criando o diretorio e o path temporario */
        const workingDir = join (tmpdir(), 'thumbs');
        const tmpFilePath = join (workingDir, 'source.png');

        /* Verificando se a imagem e a default */
        if (fileName.includes('default')) {
            console.log ('Imagem default não pode ser alterada, saindo da função....');
            return false;
        }

        /* Verificando se o customMetadata existes */
        if ( typeof customMetadata['edited'] === "undefined") {
            customMetadata['edited'] = "false";
        }

        /* Verificando se a imagem e JPEG ou se ja foi alterada */
        if (!object.contentType.includes('image/') || customMetadata['edited'].includes('true')) {
            console.log ('O arquivo já foi alterado ou não é uma imagem, saindo da função...');
            return false;
        }

        /* 1. Garantido que o diretorio do thumbnail existe */
        await fs.ensureDir (workingDir);

        /* 2. Fazendo o download do arquivo de origem */
        console.log ('Fazendo o download do arquivo no path: ' + filePath);
        await bucket.file(filePath).download({
            destination: tmpFilePath
        });

        /* 3. Redimensionando as imagens e definindo o array de promisses  */
        //const sizes = [64, 128, 256];
        const sizes = [256];

        const uploadPromises = sizes.map(async size => {
            console.log ('Redimensionando a imagem e convertendo para JPEG.');
            //const thumbName = `thumbs@${size}_${fileName}`;
            const thumbName = `${fileName}`;
            const thumbPath = join (workingDir, thumbName);

            /* Redimensionando a imagem de origem */
            await sharp (tmpFilePath)
                .resize(size, size)
                .toFormat('jpeg')
                .toFile(thumbPath);

            /* Upload para o GCS */
            console.log('Fazendo o upload para o GCS.');
            return bucket.upload(thumbPath, {
                destination: join(bucketDir, thumbName),
                metadata: {
                    contentType: contentType,
                    metadata: {
                        'edited': 'true'
                    },
                }
            });

            /* Atualizando os metadatas */
        });

        /* Realizando o upload */
        console.log('Fazendo o upload do promisse');
        await Promise.all(uploadPromises);

        /* Limpando os arquivos temporarios */
        console.log ('Removendo os arquivos temporarios e finalizando...');
        return fs.remove (workingDir);

    });
...