2015-02-17 23 views
17

Tôi đang có thời gian làm việc với tài liệu aws-sdk, tất cả các liên kết tôi theo dõi có vẻ đã lỗi thời và không sử dụng được.Tải hình ảnh lên S3 bằng aws-sdk v2

Tôi đang tìm một ví dụ triển khai thẳng về việc tải tệp hình ảnh lên thùng S3 trong Ruby.

  • hãy nói con đường hình ảnh là screenshots/image.png
  • và tôi muốn tải lên nó vào xô my_bucket
  • AWS creds sống trong ENV tôi

Bất cứ lời khuyên được nhiều đánh giá cao.

+0

khi tôi làm theo những ví dụ tôi nhận được lỗi như: '' 'phương thức undefined' write 'cho # (NoMethodError) '' ' – YoDK

+0

Tôi đã kết thúc bằng cách sử dụng câu trả lời này (http://stackoverflow.com/questions/130948/ruby-convert-file-to-string) sau đó được sử dụng '' 'object = bucket.object ('image.png')' '' '' ' object.put (nội dung: nội dung) '' ' – YoDK

+0

@EldadMor Bạn đã liên kết với tài liệu v1. Tài liệu v2 được tìm thấy ở đây: http://docs.aws.amazon.com/sdkforruby/api/index.html –

Trả lời

33

Đây là cách bạn có thể tải lên một tập tin từ đĩa vào xô tên và phím:

s3 = Aws::S3::Resource.new 
s3.bucket('my_bucket').object('key').upload_file('screenshots/image.png') 

Đó là phương pháp đơn giản nhất. Bạn nên thay thế 'key' bằng khóa mà bạn muốn nó được lưu trữ trong Amazon S3. Thao tác này sẽ tự động tải lên các tệp lớn cho bạn bằng API tải lên nhiều phần và sẽ thử lại các phần không thành công.

Nếu bạn muốn tải luôn luôn sử dụng đối tượng PUT, bạn có thể gọi #put hoặc sử dụng một Aws::S3::Client:

# using put 
s3 = Aws::S3::Resource.new 
File.open('screenshots/image.png', 'rb') do |file| 
    s3.bucket('my_bucket').object('key').put(body:file) 
end 

# using a client 
s3 = Aws::S3::Client.new 
File.open('screenshots/image.png', 'rb') do |file| 
    s3.put_object(bucket:'my_bucket', key:'key', body:file) 
end 

Ngoài ra, các tài liệu tham khảo API cho SDK v2 là ở đây: http://docs.aws.amazon.com/sdkforruby/api/index.html

+0

Bạn là anh hùng đáng sợ của tôi! Đã dành 3-4 giờ cuối cùng cố gắng để làm cho công việc này không có kết quả. Làm điều này trong v1 của aws-sdk rất đơn giản nhưng v2 có vẻ phức tạp không cần thiết. – mmichael

+0

@mmichael Tôi tò mò về cách tải lên v2 phức tạp hơn v1? Cú pháp rất giống nhau, phải không? –

+0

Vâng, với v1 bạn không phải đối phó với các lớp Client hoặc Resource, bạn chỉ có thể chạy 's3 = AWS :: S3.new' và sau đó là' s3.buckets ['bucket_name']. ] .write (tập tin: '/ path/to/file') '. Tôi thực sự bỏ lỡ, phiên bản v2 không phức tạp hơn. Tôi có nghĩa là để nói rằng các tài liệu v2 chỉ là khó hiểu hơn. Không nơi nào trong tài liệu mới, nó cho bạn thấy làm thế nào để làm các bước trong câu trả lời của bạn. Và nếu có, thì nó không rõ ràng như [hướng dẫn trong v1] (http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3.html) nơi nó hiển thị cho bạn mọi thứ bạn cần trên một trang . – mmichael

Các vấn đề liên quan