2013-01-25 24 views
5

Cách nối văn bản vào tệp hiện có hoặc mới được tạo trong S3. Tôi đang sử dụng fog và tôi đã mã sauRuby - Nối nội dung ở cuối tệp s3 hiện có bằng cách sử dụng sương mù

require 'fog' 
file = "abc.csv" 
bucket = 'my_bucket' 
storage = Fog::Storage.new(:provider => 'AWS', :aws_access_key_id => 'XXXXXXXX', :aws_secret_access_key => 'YYYYYYYY') 
dir  = connection.directories.new(:key => bucket) # no harm, if this bucket already exists, if not create one 
buffer = ["big_chunk1", "big_chunk2", "big_chunk3", "big_chunk4", "big_chunk5"] 

# I need help after this line. No changes above. 
buffer.each do |chunk| 
    # this will not work as it will not append text below the existing file or 
    # newly created one. I am not looking for solution suggesting, buffer.join('') 
    # and then write whole chunk at once. I have to write in chuck for some specific reason. 
    # Also I dont want to first read existing data and then take in to memory 
    # and then append and finally write back. 
    dir.files.create(:key => file, :body => chunk, :public => false) 
end 

Trả lời

5

Sau khi tải lên để S3, một tập tin là bất biến - nó không thể thay đổi hoặc nối vào.

Nếu bạn chỉ muốn tải tệp lên theo khối, bạn có thể sử dụng api tải lên nhiều phần, (giả sử bạn có dưới 10000 khối và tất cả trừ lần cuối cùng sẽ có ít nhất 5MB), tuy nhiên bạn ' d có thể cần phải giảm đến mức yêu cầu sương mù (thay vì sử dụng các mô hình sương mù như bạn hiện đang).

+0

Cảm ơn @Frederick Cheung. Tôi đã đạt đến cùng một kết luận sau khi có rất nhiều nghiên cứu. Nhân tiện, bạn có biết cách đăng nhập url s3 bằng sương mù không? Không thể tìm thấy bất kỳ thông tin nào về nó dễ dàng trong tài liệu về sương mù. – JVK