Uploading files lên S3 bằng AWS SDK Ruby Gem
Để upload files lên kho lưu trữ Amazon S3 của bạn, bạn có thể sử dụng phiên bản aws-sdk 2. Theo mặc định gem sẽ tìm kiếm các thôn tin xác thực trong các biến môi trường. Vì vậy, bạn phải export các giá trị trên terminal như sau: export AWS_ACCESS_KEY_ID='my-very-secret-key' Bạn có thẻ xác minh nó ...
Để upload files lên kho lưu trữ Amazon S3 của bạn, bạn có thể sử dụng phiên bản aws-sdk 2. Theo mặc định gem sẽ tìm kiếm các thôn tin xác thực trong các biến môi trường. Vì vậy, bạn phải export các giá trị trên terminal như sau: export AWS_ACCESS_KEY_ID='my-very-secret-key' Bạn có thẻ xác minh nó được thiết lập bằng cách thực hiện: echo $AWS_ACCESS_KEY_ID Bạn phải đặt AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY và AWS_REGION. Bạn có thể tạo một tài nguyên S3 cho vùng nơi chứa những lưu trữ của bạn và tạo một đối tượng có tên tệp duy nhất và gọi upload_file như dưới đây:
require 'aws-sdk' file_name = 'your-file.mp4' s3 = Aws::S3::Resource.new(region: ENV['AWS_REGION']) obj = s3.bucket('your-s3-bucket-name').object(file_name) puts "Uploading file #{file_name}" obj.upload_file("/Users/username/path/to/#{file_name}") puts "Done"
Chúng ta có thể thêm một con quay để chắc chắn rằng tiến độ đang được thực hiện. Phiên bản sửa đổi như sau:
require 'aws-sdk' def with_spinner chars = %w[| / - ] not_done = true spinner = Thread.new do while not_done do print chars.rotate!.first sleep 0.1 print "" end end yield.tap do # After yielding to the block, save the return value not_done = false # Tell the thread to exit, cleaning up after itself… spinner.join # …and wait for it to do so. end # Use the block's return value as the method's end # By default aws-sdk looks at these environment variables # ENV['AWS_REGION'], ENV['AWS_ACCESS_KEY_ID'] and ENV['AWS_SECRET_ACCESS_KEY'] def actual_job ENV['AWS_REGION'] = 'us-east-1' file_name = 'test.mp4' s3 = Aws::S3::Resource.new(region: ENV['AWS_REGION']) obj = s3.bucket('s3-bucket-name').object(file_name) print "Uploading file #{file_name}" obj.upload_file("/Users/bugs/Desktop/#{file_name}") end with_spinner do actual_job end puts "Done!"
Để lấy kích thước file tồi thường sử dụng lệnh curl, bạn có thể thực hiện bất kì lệnh nào trong ruby bằng cách sử dụng phương thức đánh dấu Kernel.
command = `curl -I -s https://your-s3-bucket-url/test.mp4 | grep 'Content-Length'` puts command
Thay vì sử dụng curl, để nhất quán, chúng ta có thể sử dụng aws-sdk thư viện để tìm ra kích thước tập tin:
require 'aws-sdk' file = Aws::S3::Object.new('your-s3-bucket', 'your-s3-file-name-with-extension') puts file.content_length
Điều này tự động hoá một số bước của quy trình làm việc screencast cho rubyplus.com. Vì tôi không còn phải đăng nhập vào trình quản lý mật khẩu, hãy đăng nhập vào giao diện điều khiển của aws, sử dụng giao diện người dùng của họ để đi đến nhóm chính xác và tải tệp lên theo cách thủ công.