servidor precio glacier costo cli aws rest amazon-s3 amazon-web-services

rest - glacier - precio de amazon s3



Nombre de descarga del archivo de cambio de Amazon S3 (3)

Tengo archivos almacenados en S3 con un GUID como nombre de clave.

Estoy usando una URL pre firmada para descargar según la API REST de S3

Guardo el nombre del archivo original en mi propia base de datos. Cuando un usuario hace clic para descargar un archivo desde mi aplicación web, quiero devolver su nombre de archivo original, pero actualmente todo lo que obtiene es un GUID . ¿Cómo puedo conseguir esto?

Mi aplicación web está en Salesforce, así que no tengo mucho control para hacer response.redirects, todos descargan el archivo al servidor web y luego lo renombran debido a las limitaciones del gobernador.

¿Hay algún redireccionamiento de HTML, actualización de meta, Javascript que pueda usar? ¿Hay alguna forma de cambiar el nombre del archivo de descarga para S3 (lo único que se me ocurre es hacer frente al objeto con un nuevo nombre, descargarlo y luego eliminarlo).

Quiero evitar crear un depósito por usuario, ya que tendremos muchos usuarios y todavía no hay garantía de que cada archivo con cada cubo tenga un nombre único

¿Alguna otra solución?


A principios de enero de 2011, S3 agregó reemplazos de encabezado de solicitud. Esta funcionalidad le permite ''dinámicamente'' alterar el encabezado de la disposición del contenido para solicitudes individuales.

Consulte la documentación de S3 sobre obtención de objetos para obtener más detalles.


Si bien la respuesta aceptada es correcta, me resulta muy abstracta y difícil de utilizar.

Aquí hay una pieza de código node.js que resuelve el problema planteado. Aconsejo ejecutarlo como AWS Lambda para generar Url pre-firmado.

var AWS = require(''aws-sdk''); var s3 = new AWS.S3({ signatureVersion: ''v4'' }); const s3Url = process.env.BUCKET; module.exports.main = (event, context, callback) => { var s3key = event.s3key var originalFilename = event.originalFilename var url = s3.getSignedUrl(''getObject'', { Bucket: s3Url, Key: s3key, Expires: 600, ResponseContentDisposition: ''attachment; filename ="'' + originalFilename + ''"'' }); [... rest of Lambda stuff...] }

Tome nota del atributo ResponseContentDisposition del objeto params pasado a la función s3.getSignedUrl .

Más información en getObject function doc en http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property


Supongo que tu cruz publicó estas preguntas en el foro de Amazon S3 , pero por el bien de los demás me gustaría publicar la respuesta aquí:

Si solo hay un "nombre de usuario" para cada objeto S3, puede configurar el encabezado Content-Disposition en su archivo s3 para establecer el nombre del archivo de descarga: Content-Disposition: attachment; filename = foo.bar

En aras de la equidad, me gustaría mencionar que no fui yo quien proporcionó la respuesta correcta en el foro de Amazon y que todos los créditos deberían ir a Colin Rhodes ;-)