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.

Cómo generar una URL prefirmada de ASW S3 desde PHP y luego subir varios archivos en esa URL desde JavaScript?

Quiero subir varios archivos desde el navegador con axios a un bucket de s3. Estoy usando la biblioteca aws-sdk-php en laravel. Mi intención es cuando quiero subir uno o varios archivos,

  1. Enviaré una solicitud GET al backend (laravel) para obtener una URL firmada previamente.
  2. Después de recibir la URL, haré una solicitud PUT/POST a esa URL con todos los archivos.

He leído la documentación de aws-sdk-php y he encontrado algunos problemas con mi intención.

  1. He visto que necesito proporcionar una Clave de Objeto cuando quiero generar una URL firmada previamente. En la documentación y otros artículos, utilizan el nombre de archivo como Clave. Pero para mi propósito, no puedo enviar varios nombres de archivo ya que no tiene sentido.
  2. Luego pensé en generar un UUID y usarlo como Clave. Pero luego, ¿cómo accedería a mis archivos individualmente más tarde? No encontré ninguna referencia a esa parte.

¿Alguien puede ayudarme con estos problemas?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás enfrentando algunos problemas al intentar cargar varios archivos desde el navegador utilizando axios en un bucket de S3 con la biblioteca aws-sdk-php en Laravel. Vamos a discutir estos problemas uno por uno y ver si podemos encontrar una solución para ellos.

    Problema 1: Clave de objeto para múltiples archivos cargados

    Como has mencionado, la biblioteca aws-sdk-php requiere una clave de objeto para generar una URL con firma para cargar un archivo en un bucket de S3. Sin embargo, cuando quieres cargar varios archivos, no puedes usar la misma clave de objeto para todos los archivos ya que no tiene sentido.

    Una solución a este problema es crear una carpeta en tu bucket de S3 con un nombre único, como un UUID, y utilizar ese nombre de carpeta como la clave de objeto al generar la URL con firma. Luego, cuando cargues varios archivos en esa URL, todos los archivos se almacenarán en esa carpeta con sus respectivos nombres de archivo. De esta manera, podrás acceder a tus archivos individualmente más adelante especificando el nombre de la carpeta y el nombre del archivo.

    Problema 2: Acceder a archivos individuales con UUID

    Si decides utilizar un UUID como clave de objeto al generar la URL con firma, podrías enfrentar otro problema al acceder a archivos individuales más adelante. El UUID por sí solo no será suficiente para especificar qué archivo quieres acceder, ya que todos los archivos se almacenarán en la misma carpeta con el mismo UUID como clave de objeto.

    Para solucionar este problema, puedes añadir el nombre de archivo original al UUID al cargar el archivo en S3. Por ejemplo, puedes nombrar el archivo como uuid_nombrearchivo.ext. De esta manera, podrás acceder fácilmente a archivos individuales más adelante especificando el nombre de la carpeta y el nombre del archivo, que incluye el UUID y el nombre de archivo original.

    En conclusión, puedes usar un nombre de carpeta único o un UUID con el nombre de archivo original como clave de objeto al generar la URL con firma para cargar varios archivos en un bucket de S3. De esta manera, podrás acceder fácilmente a archivos individuales más adelante especificando el nombre de la carpeta y el nombre del archivo, que incluye el UUID y el nombre de archivo original.

Comments are closed.