2012-03-08 25 views
5

En aws-s3, hay un método (AWS :: S3 :: S3Object.stream) que le permite transmitir un archivo en S3 a un archivo local. No he podido encontrar un método similar en aws-sdk.Ruby AWS :: S3 :: S3Object (aws-sdk): ¿Hay algún método para transmitir datos como con aws-s3?

es decir, en AWS-s3, lo hago:

File.open(to_file, "wb") do |file| 
    AWS::S3::S3Object.stream(key, region) do |chunk| 
    file.write chunk 
    end 
end 

El AWS :: S3: Método S3Object.read embargo, toma un bloque como parámetro, pero no parece hacer nada con ella.

Respuesta

2

En este momento, no oficialmente. Encontré este hilo en el foro oficial de AWS Ruby:

Does the ruby aws gem support streaming download from S3. Citando al personal de AWS:

Lamentablemente, no hay una buena solución cocida en la gema aws-sdk. Estamos estudiando la forma en que podríamos hacer esto mucho más simple para el usuario final.

Hay un código de muestra para descargar en trozos. Es posible que desee echar un vistazo a eso en busca de inspiración.

+1

La joya de aws-sdk ahora admite lecturas de transmisión. El tema del foro se ha actualizado para reflejar esto. –

5

La gema aws-sdk ahora admite lecturas fragmentadas de objetos en S3. El siguiente ejemplo muestra una demonstación:

s3 = AWS::S3.new 
File.open(to_file, "wb") do |file| 
    s3.buckets['bucket-name'].objects['key'].read do |chunk| 
    file.write chunk 
    end 
end 
+0

¿Puedo especificar el tamaño del fragmento? –

+0

Por lo que sé, Ruby Net :: HTTP no le permite controlar el tamaño de cada fragmento dado. –

Cuestiones relacionadas