Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

157
Visualizações
Cómo descargar una URL de almacenamiento de Google firmada en la máquina del cliente

Tengo este código que crea una URL firmada para descargar un archivo específico en mi depósito:

 exports.download = functions.https.onRequest((req, res) => { const userID = req.query.userID; const downloadID = req.query.downloadID; const fileName = req.query.fileName; admin .storage() .bucket() .file(`userUploads/${userID}/${downloadID}/${fileName}`) .getSignedUrl({ version: "v4", action: "read", expires: Date.now() + 15 * 60 * 1000, // 15 minutes }) .then((signedURLArray) => { const url = signedURLArray[0]; // return res.download(url); return res.redirect(url); }) .catch((err) => { return res.send(err); }); });

He intentado:

 res.setHeader( `"content-disposition", "attachment; filename=${fileName}"` );

con res.redirect pero solo me da un HTTP_TOKEN_ERROR . Si uso res.redirect() sin configurar encabezados adicionales, solo verá el archivo en el navegador, no lo descargará; solo quiero que el usuario pueda descargar el archivo.

Obviamente, res.download no funciona ya que el archivo en cuestión no está en el servidor, se sirve en algún otro servidor donde se encuentran mis archivos de cubo (probablemente algún dominio de storage.googleapis.com )

ACTUALIZAR:

Como puede ver en la solicitud de respuesta:

ingrese la descripción de la imagen aquí

Está enviando los datos correctos al navegador.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

A medida que redirige al servidor de Google, se vuelve responsable de los encabezados de la respuesta y, específicamente, de la Content-disposition . Los metadatos de los archivos almacenados en el almacenamiento de Google se pueden configurar en o después de cargar el archivo. Tu encabezado debería verse así:

 Content-Disposition: attachment; filename="file.ext..."

Consulte estos documentos para ver las posibles opciones sobre cómo configurar los metadatos de los archivos manualmente a través de gsutil:

  • https://cloud.google.com/storage/docs/gsutil/addlhelp/WorkingWithObjectMetadata
  • https://cloud.google.com/storage/docs/metadata#content-disposition

ACTUALIZAR

Para generar una URL firmada con un encabezado personalizado (p. ej Content-Disposition ) con la API de administración de almacenamiento de Google, debe agregarse a través de un parámetro de configuración Disposición de responseDisposition con el valor deseado

Ejemplo de uso:

 ... admin .storage() .bucket() .file(`userUploads/${userID}/${downloadID}/${fileName}`) .getSignedUrl({ responseDisposition: "attachment", version: "v4", action: "read", expires: Date.now() + 15 * 60 * 1000, // 15 minutes }) ...

Consulte la referencia de MDN para ver los posibles valores de encabezado aquí: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition

Consulte la documentación de la biblioteca api de nodejs para el almacenamiento de Google aquí y enlace a las líneas donde se explican aquí las propiedades de archivos adjuntos, promptSaveAs y responseDisposition .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda