Ejemplo de código Ruby con el API compatible con DreamObjects S3

Ejemplos de Ruby AWS::SDK (gema aws-sdk-v1)

Este artículo enlista muchos ejemplos de código de Ruby para interactuar con DreamObjects.

 

Crear una Conexión

Crea una conexión para que puedas interactuar con DreamObjects.

AWS.config(
    :s3_endpoint        => 'objects-us-east-1.dream.io',
    :access_key_id      => 'my-access-key',
    :secret_access_key  => 'my-secret-key'
)

Crear una instancia de un Object de Cliente.

s3 = AWS::S3.new
 

Enlistar Buckets Propios

Obtiene una lista de Buckets que posees e imprime el nombre.

s3.buckets.each do |bucket|
        puts bucket.name
end

La salida va a verse más o menos así:

mahbuckat1
mahbuckat2
mahbuckat3
 

Crear un Bucket

Crea un nuevo bucket llamado my-new-bucket.

s3.buckets.create('my-new-bucket')
 

Enlista un Contenido de un Bucket

Obtiene una lista de hashes con el contenido de cada Object. Esto también imprime el nombre de cada Object, el tamaño del archivo y la fecha de la última modificación.

new_bucket = s3.buckets['my-new-bucket']
new_bucket.objects.each do |obj|
        puts "#{obj.key}\t#{obj.content_length}\t#{obj.last_modified}"
end

La salida se verá más o menos así si el bucket tiene algunos archivos:

myphoto1.jpg 251262  2011-08-08 21:35:48 -0400
myphoto2.jpg 262518  2011-08-08 21:38:01 -0400
 

Eliminar un Bucket

El Bucket debe estar vacío, si no, no funcionará.

bucket = s3.buckets['my-new-bucket']
bucket.delete
 

Forzar la Eliminación de Buckets que no están vacíos

bucket = s3.buckets['my-new-bucket']
bucket.delete!
 

Crear un Object

Crear un archivo hello.txt con la cadena "Hello World!"

bucket = s3.buckets['my-new-bucket']
obj = bucket.objects.create(
    'hello.txt',
    'Hello World!',
)

Sube un archivo test.txt, configura el tipo de contenido, y lo hace legible al público.

obj = s3.buckets['my-new-bucket'].objects['test.txt']
obj.write(File.open('path/to/test.txt', 'rb')
    :content_type => 'text/plain',
    :acl          => 'public_read',
)
 

Cambiar el ACL de un Object

Hace al object hello.txt legible al público y secret_plans.txt para ser privado.

bucket = s3.buckets['my-new-bucket']

bucket.objects['hello.txt'].acl = :public_read
bucket.objects['secret_plans.txt'].acl = :private
 

Descargar un Object (a un archivo)

Descarga un archivo poetry.pdf y lo guarda en /home/username/documents/. Asegúrate de cambiar username a tu usuario Shell.

bucket = s3.buckets['my-new-bucket']

File.open('/home/username/documents/poetry.pdf', 'w') do |file|
        bucket.objects['poetry.pdf'].read do |chunk|
                file.write(chunk)
        end
end
 

Eliminar un Object

Elimina el object goodbye.txt.

bucket = s3.buckets['my-new-bucket']
bucket.objects.delete('goodbye.txt')
 

Generar URL de Descarga de un Object (firmado y sin firmar)

Esto genera una URL de descarga sin asignar para hello.txt. Esto funciona por que hello.txt fue hecho público configurando el ACL de arriba. Esto genera entonces una URL firmada para secret_plans.txt que funcionará durante 1 hora. Las URL de descarga firmadas funcionarán durante el período de tiempo, incluso si el objeto es privado (cuando finalice el período de tiempo, la URL dejará de funcionar).

puts s3.buckets['my-new-bucket'].objects['hello.txt'].public_url

puts s3.buckets['my-new-bucket'].objects['secret_plans.txt'].url_for(
    :read,
    :expires => 60 * 60
)

La salida de esto se verá más o menos así:

https://objects-us-east-1.dream.io/my-bucket-name/hello.txt
https://objects-us-east-1.dream.io/my-bucket-name/secret_plans.txt?Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX&Expires=1316027075&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXX
 

Ejemplos de Ruby AWS::S3 (gema aws-s3)

 

Crear una Conexión

Crear una conexión para que puedas interactuar con el servidor.

AWS::S3::Base.establish_connection!(
        :server            => 'objects-us-east-1.dream.io',
        :use_ssl           => true,
        :access_key_id     => 'my-access-key',
        :secret_access_key => 'my-secret-key'
)
 

Enlistar Buckets Propios

Obtiene una lista de los objects AWS::S3::Bucket que posees. Esto también imprime el nombre del bucket y la fecha de creación de cada bucket.

AWS::S3::Service.buckets.each do |bucket|
        puts "#{bucket.name}\t#{bucket.creation_date}"
end

La salida se verá mas o menos así:

mahbuckat1   2011-04-21T18:05:39.000Z
mahbuckat2   2011-04-21T18:05:48.000Z
mahbuckat3   2011-04-21T18:07:18.000Z
 

Crear un Bucket

Crea un bucket llamado my-new-bucket.

AWS::S3::Bucket.create('my-new-bucket')
 

Enlistar el Contenido de un Bucket

Obtiene una lista de hashes con el contenido de cada object. Esto también imprime el nombre de cada object, el tamaño del archivo y la fecha de la última modificación.

new_bucket = AWS::S3::Bucket.find('my-new-bucket')
new_bucket.each do |object|
        puts "#{object.key}\t#{object.about['content-length']}\t#{object.about['last-modified']}"
end

La salida se verá más o menos así si el bucket tiene algunos archivos:

myphoto1.jpg 251262  2011-08-08T21:35:48.000Z
myphoto2.jpg 262518  2011-08-08T21:38:01.000Z
 

Eliminar un Bucket

El Bucket debe estar vacío, si no, no funcionará.

AWS::S3::Bucket.delete('my-new-bucket')
 

Forzar la Eliminación de Buckets no vacíos

AWS::S3::Bucket.delete('my-new-bucket', :force => true)
 

Crear un Object

Crea un archivo hello.txt con la cadena "Hello World!"

AWS::S3::S3Object.store(
        'hello.txt',
        'Hello World!',
        'my-new-bucket',
        :content_type => 'text/plain'
)
 

Cambiar el ACL de un Object

Hace al objeto hello.txt legible paga el público y secret_plans.txt para ser privado.

policy = AWS::S3::S3Object.acl('hello.txt', 'my-new-bucket')
policy.grants = [ AWS::S3::ACL::Grant.grant(:public_read) ]
AWS::S3::S3Object.acl('hello.txt', 'my-new-bucket', policy)

policy = AWS::S3::S3Object.acl('secret_plans.txt', 'my-new-bucket')
policy.grants = []
AWS::S3::S3Object.acl('secret_plans.txt', 'my-new-bucket', policy)
 

Descargar un Object (a un archivo)

Descarga el object poetry.pdf y lo guarda en /home/username/documents/. Asegúrate de cambiar username a tu usuario Shell.

open('/home/username/documents/poetry.pdf', 'w') do |file|
        AWS::S3::S3Object.stream('poetry.pdf', 'my-new-bucket') do |chunk|
                file.write(chunk)
        end
end
 

Eliminar un Object

Elimina el object goodbye.txt.

AWS::S3::S3Object.delete('goodbye.txt', 'my-new-bucket')
 

Generar URL de Descarga de un Object (firmado y sin firmar)

Esto genera una URL de descarga sin asignar para hello.txt. Esto funciona por que hello.txt fue hecho público configurando el ACL de arriba. Esto genera entonces una URL de descarga firmada para secret_plans.txt que funcionará durante 1 hora. Las URL de descarga firmadas funcionarán durante el período de tiempo, incluso si el object es privado (cuando finalice el período de tiempo, la URL dejará de funcionar).

puts AWS::S3::S3Object.url_for(
        'hello.txt',
        'my-new-bucket',
        :authenticated => false
)

puts AWS::S3::S3Object.url_for(
        'secret_plans.txt',
        'my-new-bucket',
        :expires_in => 60 * 60
)

La salida se verá más o menos así:

https://objects-us-east-1.dream.io/my-bucket-name/hello.txt
https://objects-us-east-1.dream.io/my-bucket-name/secret_plans.txt?Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX&Expires=1316027075&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXX

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?