2016-02-11 53 views
4

我正在處理可能的巨大CSV文件,我想從我的Rails應用程序導出,因爲它在Heroku上運行,所以我的想法是在生成CSV文件時直接將這些CSV文件傳輸到S3。將Ruby從Ruby上傳到S3

現在,我有一個問題,在Aws::S3爲了能夠執行上傳,而在我的Rails應用程序,我想這樣做需要一個文件:

S3.bucket('my-bucket').object('my-csv') << %w(this is one line) 

我怎樣才能做到這一點?

+0

你看過S3 Multipart寶石嗎? https://github.com/maxgillett/s3_multipart我不認爲直接文件保存到S3是可能的,直到他們沒有生成。 – aliibrahim

+0

我正在構建CSV,在後臺作業中,我不會通過某種界面上傳它。 – linkyndy

+0

@AndreiHorak你找到解決方案嗎? – Tonja

回答

0

我會看看http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html#write-instance_method,因爲這可能是你要找的東西。

編輯 http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpRuby.html可能更加相關,因爲第一個鏈接指向紅寶石AWS-SDK V1

require 'aws-sdk' 

s3 = Aws::S3::Resource.new(region:'us-west-2') 
obj = s3.bucket('bucket-name').object('key') 

# string data 
obj.put(body: 'Hello World!') 

# IO object 
File.open('source', 'rb') do |file| 
    obj.put(body: file) 
end 
+2

這仍然是一個已經建好的文件。我想逐步上傳文件的塊。 – linkyndy

2
s3 = Aws::S3::Resource.new(region:'us-west-2') 
obj = s3.bucket.object("#{FOLDER_NAME}/#{file_name}.csv") 
file_csv = CSV.generate do |csv| 
    csv << ActionLog.column_names 
    ActionLog.all.each do |action_log| 
     csv << action_log.attributes.values 
    end 
    end 
    obj.put body: file_csv 

file_csv = CSV.generate是在Ruby中創建CSV數據的字符串。創建CSV的這個字符串後,我們把對S3使用桶,與路徑

#{FOLDER_NAME}/#{file_name}.csv 

在我的代碼,我導出所有的數據到ActionLog模型。

+0

用解釋圍繞你的答案會嚴重改善它。 – zx485

+0

謝謝!我已經更新了我的答案,但是我的英語不好,對不起:( –

+0

我很努力地提高你的語法和拼寫,但我承認我的方法可能不夠,我無法推斷出所有的意思 – zx485