Ejemplo: cargar un archivo en AWS S3 con Boto

E

Código de ejemplo

Amazon Web Services (AWS) es un conjunto de servicios extremadamente populares para sitios web y aplicaciones, por lo que es importante saber cómo interactuar con los distintos servicios. Aquí, nos centramos en el Servicio de almacenamiento simple (S3), que es esencialmente un servicio de almacenamiento de archivos.

Todos los archivos deben asignarse a un depósito, al que se le asigna un nombre y se puede dirigir mediante http://s3.amazonaws.com/{bucket}/{key}. A cada archivo se le asigna una clave única, que se puede utilizar más adelante para recuperar el archivo.

Hay muchas otras opciones para asignar a depósitos y archivos (cifrado, ACL, etc.), pero no hablaremos mucho aquí. Solo observe las referencias a ‘lectura pública’, que permite que cualquiera pueda descargar el archivo.

El código

El siguiente código muestra, en Python usando boto, cómo cargar un archivo en S3.

import os

import boto
from boto.s3.key import Key

def upload_to_s3(aws_access_key_id, aws_secret_access_key, file, bucket, key, callback=None, md5=None, reduced_redundancy=False, content_type=None):
    """
    Uploads the given file to the AWS S3
    bucket and key specified.
    
    callback is a function of the form:
    
    def callback(complete, total)
    
    The callback should accept two integer parameters,
    the first representing the number of bytes that
    have been successfully transmitted to S3 and the
    second representing the size of the to be transmitted
    object.
    
    Returns boolean indicating success/failure of upload.
    """
    try:
        size = os.fstat(file.fileno()).st_size
    except:
        # Not all file objects implement fileno(),
        # so we fall back on this
        file.seek(0, os.SEEK_END)
        size = file.tell()
    
    conn = boto.connect_s3(aws_access_key_id, aws_secret_access_key)
    bucket = conn.get_bucket(bucket, validate=True)
    k = Key(bucket)
    k.key = key
    if content_type:
        k.set_metadata('Content-Type', content_type)
    sent = k.set_contents_from_file(file, cb=callback, md5=md5, reduced_redundancy=reduced_redundancy, rewind=True)
    
    # Rewind for later use
    file.seek(0)
    
    if sent == size:
        return True
    return False

Usando el código

Y así es como usarías el código:

AWS_ACCESS_KEY = 'your_access_key'
AWS_ACCESS_SECRET_KEY = 'your_secret_key'

file = open('someFile.txt', 'r+')

key = file.name
bucket="your-bucket"

if upload_to_s3(AWS_ACCESS_KEY, AWS_ACCESS_SECRET_KEY, file, bucket, key):
    print 'It worked!'
else:
    print 'The upload failed...'

boto funciona con mucho más que S3, también puede acceder EC2, SES, SQSy casi todos los demás servicios de AWS. Los documentos de boto son geniales, por lo que leerlos debería darte una buena idea de cómo usar los otros servicios. Pero si no, publicaremos más ejemplos de boto, como cómo recuperar los archivos de S3.

Recursos

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad