Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

429
Vistas
Cómo comprimir archivos en Amazon s3 Bucket y obtener su URL

Tengo un montón de archivos dentro del cubo de Amazon s3, quiero comprimir esos archivos y descargarlos a través de la URL de S3 usando Java Spring.

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

S3 no es un servidor de archivos ni ofrece servicios de archivos del sistema operativo, como la manipulación de datos.

Si hay muchos archivos "ENORMES", su mejor apuesta es

  1. iniciar una instancia EC2 simple
  2. Descargue todos esos archivos a la instancia EC2, comprímalos, vuelva a cargarlos en el depósito S3 con un nuevo nombre de objeto

Sí, puede usar AWS lambda para hacer lo mismo, pero lambda tiene un tiempo de espera de ejecución de 900 segundos (15 minutos) (por lo tanto, se recomienda asignar más RAM para aumentar el rendimiento de ejecución de lambda)

El tráfico de S3 a la instancia EC2 de la región local, etc., es GRATIS.

Si su propósito principal es solo leer esos archivos dentro de la misma región de AWS utilizando los servicios EC2/etc, entonces no necesita este paso adicional. Simplemente acceda al archivo directamente.

(Actualización): como mencionó @Robert Reiz, ahora también puede usar AWS Fargate para hacer el trabajo.

Nota :

Se recomienda acceder y compartir archivos mediante la API de AWS. Si tiene la intención de compartir el archivo públicamente, debe analizar seriamente el problema de seguridad e imponer una restricción de descarga. El tráfico de AWS a Internet nunca es barato.

about 4 years ago · Santiago Trujillo Denunciar

0

Hola, recientemente tuve que hacer eso para mi aplicación: servir un paquete de archivos en formato zip a través de un enlace de URL que los usuarios pueden descargar.

En pocas palabras, primero cree un objeto usando el método BytesIO, luego use el método ZipFile para escribir en este objeto iterando todos los objetos s3, luego use el método put en este objeto zip y cree una URL predeterminada para él.

El código que usé se ve así:

Primero, llame a esta función para obtener el objeto zip, ObjectKeys son los objetos s3 que debe colocar en el archivo zip.

 def zipResults(bucketName, ObjectKeys): buffer = BytesIO() with zipfile.ZipFile(buffer, 'w', compression=zipfile.ZIP_DEFLATED) as zip_file: for ObjectKey in ObjectKeys: objectContent = S3Helper().readFromS3(bucketName, ObjectKey) fileName = os.path.basename(ObjectKey) zip_file.writestr(fileName, objectContent) buffer.seek(0) return buffer

Luego llame a esta función, la clave es la clave que le da a su objeto zip:

 def uploadObject(bucketName, body, key): s3client = AwsHelper().getClient("s3") try: response = s3client.put_object( Bucket=bucketName, Body=body, Key=key ) except ClientError as e: logging.error(e) return None return response

Por supuesto, necesitaría los módulos io, zipfile y boto3.

about 4 years ago · Santiago Trujillo Denunciar

0

Si necesita archivos individuales (objetos) en S3 comprimidos, entonces es posible hacerlo de forma indirecta. Puede definir un punto final de CloudFront que apunte al depósito S3 y luego dejar que CloudFront comprima el contenido al salir: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda