2013-11-26 59 views
1

我有一個應用程序,用戶可以在其中上傳csv並隨後播放數據。現在,csv已經上傳到我在Heroku上的rails應用程序的公共文件夾中,但是我想將它發送到s3 b/c,heroku對用戶上傳的文件不好。下面是我的控制器在那裏我直接保存CSV到Heroku的代碼:將用戶上傳的文件發送到s3 in rails

File.open(Rails.root.join(
    'public', 
    'user_files', 
    csv_name + '.csv' 
), 'w') do |file|   
    file.write(output_csv_file) 
end 

如何改變這種代碼,以及任何其他代碼,我需要在軌道改變,這個文件發送給我在s3中的aws桶?我在我的Gemfiles中安裝了'aws-sdk'寶石。我還爲我的存儲桶設置了適當的環境變量。這就是我迄今爲止所做的一切......真的失去了。

+0

你目前如何上傳文件?它是用「回形針」嗎? –

+0

不,沒有回形針。不知道如何使用它。現在我通過表單上傳文件。 output_csv_file = params [:file] .read。然後我將文件寫入我的Rails應用程序,如上所示。 – bumpkin

+0

好的,謝謝你的回覆!讓我爲你寫一個答案 –

回答

2

我不知道這是否會幫助,但它可能給你一些想法


回形針

的方式我們使用Rails團隊上傳的文件是用驚人Paperclip寶石。我提到這一點,因爲回形針不僅與S3集成,而且還爲您提供正確管理文件的核心方法

回形針與ActiveRecord(您的數據庫)一起使用來存儲文件信息。然後,您可以在Paperclip的配置選項中定義存儲文件的位置(包括S3)。這意味着,如果您上傳允許用戶更改的.csv文件&,則使用類似回形針的內容可以幫助您保持正確的順序

雖然您可能會或可能不會從Paperclip中受益,但下面概述了它的工作原理:


上傳隨着回形針

有一個很好的Railscast about Paperclip here

Paperclip Railscast

這裏是如何得到它的工作:

#app/models/csv.rb 
class CSV < ActiveRecord::Base 
    has_attached_file :attachment 

end 

#app/controllers/csv_controller.rb 
def create 
    @csv = CSV.new(CSV_params) 
    @csv.save 
end 

#app/views/csv/new.html.erb 
<%= form_for @csv do |f| %> 
    <%= f.file_field :attachment %> 
<% end %> 

使用回形針與S3

有一個偉大的tutorial on Heroku about Paperclip & S3

這裏是如何得到一些活碼與S3搭配的回形針:

#app/config/application.rb -> can use /environments/production.rb if you wish 
config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_host_name => 's3-eu-west-1.amazonaws.com' 
} 

#app/config/models/csv.rb 
has_attached_file :image, 
       :styles => { :medium => "x300", :thumb => "x100" }, 
       :default_url => "http://images.apple.com/iphone-5s/home/images/smart_hero.png", 
       :storage => :s3, 
       :bucket => 'firststop', 
       :s3_credentials => S3_CREDENTIALS 

這是您如何使用Paperclip與Rails & S3一起使用的概述。如果聽起來你可以從中受益,請告訴我&我們可以在你的應用程序中實現它

相關問題