2013-07-14 16 views
0

在我的rails項目中,我需要用戶上傳一個文件(input_file),我將使用外部應用程序處理該文件。一旦完成,我想將處理後的文件作爲不同的附件(輸出文件)附加到相同的模型上。Rails - 在Paperclip附件上運行外部程序進行處理並將輸出附件保存回模型

我已經能夠創建一個表單並使用回形針允許用戶將input_file上傳到我的模型FileProcessor。我不知道下一步如何在input_file上調用可執行文件並將其保存爲output_file。

基於回形針,一旦文件上傳,我可以通過input_file.path訪問路徑

output_file = %w{external_app input_file.path out_file_name} 

Class FileProcessor 
has_attached_file :input_file 
has_attached_file :output_file 

林困惑,這個地方調用運行外部應用程序放在哪裏?在模型或控制器中(def create)。另外,如何使用回形針將output_file與模型相關聯,而無需實際上傳。

回答

1

此類代碼的位置取決於您的外部流程的業務類型。有了這個問題所描述的要求,它就像這樣簡單:

class FileProcessor < ActiveRecord 
    ... 
    after_validation do |fp| 
    tmp_file = "/tmp/#{rand}" 
    system "/usr/bin/awesome.sh #{fp.input_file.path} > #{tmp_file}" 
    fp.output_file = File.open(tmp_file) 
    end 
    ... 
end 

我希望,這是你在找什麼。

+0

謝謝。上面的例子給了我一個關於如何去實現我的最終解決方案的好主意。我把這個函數放在模型中。 – hgill

相關問題