Uploading files lên S3 bằng AWS SDK Ruby Gem
Bài đăng này đã không được cập nhật trong 3 năm
Để 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 giá trị đượ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 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 "\b"
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 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.
All rights reserved