Tengo archivos almacenados en S3 con un GUID como nombre de clave.
Estoy usando una URL firmada previamente 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 de 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, por lo que no tengo mucho control para hacer response.redirects todos descargan el archivo al servidor web y luego le cambian el nombre debido a limitaciones del gobernador.
¿Hay alguna redirección de HTML, meta actualización, Javascript que pueda usar? ¿Hay alguna manera de cambiar el nombre del archivo de descarga para S3 (lo único que se me ocurre es cambiar el nombre del objeto, descargarlo y luego eliminarlo)?
Quiero evitar la creación de un depósito por usuario, ya que tendremos muchos usuarios y aún no hay garantía de que cada archivo en cada depósito tenga un nombre único.
¿Alguna otra solución?
Respuestas:
Supongo que su 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 archivo de usuario" para cada objeto S3, entonces puede configurar el encabezado Content-Disposition en su archivo s3 para configurar el nombre del archivo de descarga: Content-Disposition: adjunto; nombre de archivo = foo.bar
En aras de la justicia, me gustaría mencionar que no fui yo quien proporcionó la respuesta correcta en el foro de Amazon y que todos los créditos deben ir a Colin Rhodes ;-)
fuente
https://...example.txt?response-content-disposition=attachment;filename=foo.bar
Si bien la respuesta aceptada es correcta, la encuentro muy abstracta y difícil de utilizar.
Aquí hay un fragmento de código de node.js que resuelve el problema indicado. Aconsejo ejecutarlo como AWS Lambda para generar una URL firmada previamente.
Por favor, tome nota del
ResponseContentDisposition
atributo delparams
objeto pasado a las3.getSignedUrl
función.Más información en el documento de la función getObject en http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property
fuente
originalFilename
parámetro como.A principios de enero de 2011, S3 agregó anulaciones de encabezado de solicitud. Esta funcionalidad le permite alterar 'dinámicamente' el encabezado Content-Disposition para solicitudes individuales.
Consulte la documentación de S3 sobre cómo obtener objetos para obtener más detalles.
fuente
Para Java, AWS SDK a continuación, el fragmento de código debería funcionar:
fuente
Con C # usando AWSSDK,
fuente
Tengo el mismo problema, lo resolví configurando el encabezado http "content-disposition" mientras enviaba el archivo a S3, la versión del SDK es AWS SDK para PHP 3.x. aquí está el documento http://docs.amazonaws.cn/en_us/aws-sdk-php/latest/api-s3-2006-03-01.html#putobject
una parte de mi código
fuente
Parece que: response_content_disposition no está documentado en el método presigned_url. Esto es lo que funcionó para mi
fuente