2010-11-16 35 views
3

在我的Rails應用程序中,用戶可以上傳Excel文件。在我的模型存在使用attachment_fu像這樣一類的importfile:如何在Rails中通過請求保留臨時文件?

class ImportFile < ActiveRecord::Base 
    has_attachment :storage => :file_system, :path_prefix => 'public/imports', :max_size => 10.megabytes 
end 

當用戶點擊「添加文件」,他進入一個網頁,一個<%= fields.file_field:uploaded_data%>。 attachment_fu做它的工作和文件上傳正在完成(讓我們省略驗證問題)。我想保留這個文件以備將來使用,將上傳的文件複製到其他臨時文件中。臨時文件工作正常 - 我可以在磁盤上看到它。

def self.write_to_tmp(data) 
    temp_file = Tempfile.new("import", "#{Rails.root}/tmp") 
    begin 
    temp_file.write(data) 
    ensure 
    temp_file.close(false) 
    end 
    temp_file 
end 

我想要做的是顯示用戶預覽,然後讓他選擇,如果他想添加一個文件或放棄它 - 有兩個按鈕。當用戶選擇保存文件時,我遇到了問題,因爲上面剛創建的臨時文件已經消失。它在請求前被刪除。

有沒有人有提示如何實現這個?或者可以指向我上傳與預覽文件場景,就像我已經預見的那樣?我一直在尋找幾天,但我沒有找到一個。

回答

1

這種事最可靠的方法是創建一個簡單的「上傳」跟蹤模型,就像你在那裏,但使用Paperclip來代替。這可以配置爲處理大量的文件。

您需要實際保存這些記錄以使它們在請求之間保持不變。這將導致孤立的記錄,但是一個簡單的cron作業或rake任務可以在任何需要的時候關閉所有未使用的文件。

在單個目錄中創建大量文件通常是一個壞主意。回形針有一個路徑參數,將您的ID號分成幾部分,所以記錄#903132進入.../90/31/32例如。

保留常規附件,如果他們想丟棄它,請將其刪除,否則使用它。稍後清理掉所有未使用的附件。

+0

感謝您的提示 - 這很有幫助。如果我決定擁有一些孤兒記錄,我不必切換到Paperclip,因爲attachment_fu也是。 – 2010-11-16 20:52:55

相關問題