No pude encontrar el método deleteFiles() en la referencia de la API de Firebase. Mi IDE me dice que este método toma un argumento opcional DeleteFilesOptions y tampoco pude encontrar ninguna información sobre ese tipo. Si alguien pudiera señalarme esta documentación, se lo agradecería.
Dicho esto, he visto varias publicaciones que usan este método, con este argumento, para eliminar una carpeta de almacenamiento completa (y todos sus archivos) a través de una función de nube. Mi pregunta es, ¿es esta la forma correcta de hacerlo (ya que falta la documentación aquí)?
const functions = require("firebase-functions"); const admin = require("firebase-admin"); exports.deleteStorageFolder = functions.https.onCall(async (data, _context) => { const uid = data.userId; try { const bucket = admin.storage().bucket(); // returns the default bucket, which is good await bucket.deleteFiles({ prefix: `images/users/${uid}`, // the path of the folder }); return Promise.resolve(true); } catch (error) { throw new functions.https.HttpsError("unknown", "Failed to delete storage folder.", error); } });Como @Doug ya mencionó en el comentario, "Firebase solo proporciona contenedores alrededor de Cloud Storage. Son lo mismo". Además, de acuerdo con esta documentación , "Cloud Storage para Firebase almacena sus archivos en un depósito de Google Cloud Storage, haciéndolos accesibles a través de Firebase y Google Cloud. Esto le permite la flexibilidad de cargar y descargar archivos desde clientes móviles a través de los SDK de Firebase para Almacenamiento en la nube."
Habiendo dicho eso, intenté replicar el fragmento de código que proporcionó usando deleteFiles() , y funcionó bien de mi parte:
// // The Firebase Admin SDK to access Firestore. const functions = require("firebase-functions"); const admin = require('firebase-admin'); const firebaseConfig = { // Your Firebase configuration... }; admin.initializeApp(firebaseConfig); const bucket = admin.storage().bucket(); async function deleteFolder(){ await bucket.deleteFiles({ prefix: 'images/users/${uid}' // the path of the folder }); } deleteFolder();Otra opción que puede hacer es usar directamente Google Cloud Storage y omitir el uso de Firebase Storage:
const {Storage} = require('@google-cloud/storage'); const storage = new Storage(); const bucket = storage.bucket("your-bucket-name"); bucket.deleteFiles({ prefix: 'images/users/${uid}' }, function(err) { if (!err) { console.log("All files in the `images` directory have been deleted."); } });Solo una nota, siguiendo la sugerencia de Doug, puede probarlo y probarlo primero en su entorno local o de prueba. Para obtener más información, puede consultardelete() y deleteFiles()