es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema en la denominación de archivos al descargar el archivo.

Esta es mi primera publicación en Stack, disculpa si está un poco confusa :/

Básicamente tengo un proyecto de Angular con Firestore detrás. Tengo una función en la nube que genera un archivo .xlsx y lo carga en mi fireStorage.

const path = 'hellothere/excels';
return workBook.xlsx.writeFile(`/tmp/myExcel.xlsx`).then(() => {
  return storageFb.upload( `/tmp/myexcel.xlsx`,{
    destination: path+'/myExcel.xlsx',
  }
  )
}).then(() => path);

Donde StorageFb es el bucket de mi almacenamiento.

Actualmente está funcionando, sube mi archivo .xlsx a /hellothere/excels/ con el nombre myExcel.xlsx. Pero cuando lo descargo (desde el panel de administración o desde mi cliente Angular), aparece con el nombre completo hellothere_excels_myExcel.xlsx.

Aquí está mi código del cliente:

this.fireStorage.ref('hellothere/excels/myExcel.xlsx').getDownloadURL().subscribe((url) => {
  window.open(url, '_blank');
});
 return Promise.resolve();

Es simple. Sé que el código es desordenado, pero estoy probando todas las soluciones que puedo encontrar, así que lo limpiaré después de todo.

Captura de pantalla del panel de administración

Nombre de mi archivo

Entonces estoy un poco atrapado, ya que no sé por qué esos archivos no se descargan con solo el nombre “myExcel”. Si alguien tiene alguna pista, ¡me salvarías la semana! ¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí está relacionado con la convención de nomenclatura utilizada por Firebase Storage. Cuando subes un archivo con una ruta y un nombre de archivo, Firebase Storage reemplaza cualquier barra diagonal (/) con guiones bajos (_) en el nombre del archivo. Es por eso que tu archivo se descarga con el guion bajo en lugar de la barra diagonal.

    Para solucionar esto, puedes establecer manualmente los metadatos para el archivo que se está subiendo utilizando el método setMetadata(). Aquí tienes un ejemplo:

    const path = 'hola/excels';
    const metadata = {
       contentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
       name: 'miExcel.xlsx'
    };
    
    return workBook.xlsx.writeFile(`/tmp/miExcel.xlsx`).then(() => {
       return storageFb.upload( `/tmp/miexcel.xlsx`,{
          destination: path+ '/miExcel.xlsx',
          metadata: metadata // establecer los metadatos para el archivo
       });
    }).then(() => path);
    

    Al establecer los metadatos para el archivo con un nombre especificado, Firebase Storage utilizará ese nombre en lugar de reemplazar la barra diagonal con un guion bajo. Esto debería solucionar el problema con la descarga del archivo con el nombre incorrecto.

Comments are closed.