Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

850
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!