У меня небольшая проблема с пожарной базой.Я создал простую систему загрузки, где пользователи моего приложения могут отправлять ваши фотографии.Система проста, пользователь отправляет изображение в хранилище, а приложение сохраняет 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);
});