2014-05-07 38 views
0

我使用paperclip gem將excel文件上傳到我的應用程序。在上傳之前,我想查看header column names的存在。所以,我需要使用其路徑打開文檔並閱讀標題內容。但由於我們是在導入過程之前完成的,我們應該從被訪問的路徑而不是從我們上傳回形針文件的路徑打開它。獲取要導入的文件的絕對路徑/位置+文件名 - Ruby/Rails

例如,

假設我是從'/home/user/rajesh/Test1.xlsx'上傳文件和回形針將其上傳到'/home/user/rajesh/Project/public/system/000/000/001/Test1.xlsx'。所以,我需要得到值'/home/user/rajesh/Test1.xlsx'

代碼:

if File.extname(importfile.file_file_name) == ".csv" 
    spreadsheet = Roo::Csv.new(importfile.file.path, nil, :ignore) 
elsif File.extname(importfile.file_file_name) == ".xls" 
    spreadsheet = Roo::Excel.new(importfile.file.path, nil, :ignore) 
elsif File.extname(importfile.file_file_name) == ".xlsx" 
    spreadsheet = Roo::Excelx.new(importfile.file.path, nil, :ignore) 
else 
    raise "Unknown file type for '#{importfile.file_file_name}'" 
end 

但是,importfile.file.path沒有返回正確的路徑。

那麼,我們如何才能得到一個文件的絕對路徑與文件名?任何幫助將不勝感激。

+0

什麼是'importfile.file.path'返回? – Matthew

+0

@Matthew:'file /home/user/rajesh/Project/public/system/import_files/files//original/Test2.xlsx does not exist',因爲這是試圖調用回形針上傳的路徑。 –

+0

我會看看'文件//原創'。你有沒有看過你的回形針配置,以確保你沒有使用零值來建立你的路徑? – Matthew

回答

1

如果我理解正確,您的問題與paperclip無關,並且我認爲瀏覽器在使用文件上傳時從未將本地路徑發送到文件。

什麼阻止您在運行導入之前檢查附件?

+0

我想要使用before_save來檢查標題列來觸發模型驗證。這怎麼可能? –

+1

[This accepted answer](http://stackoverflow.com/questions/7044645/validating-attachment-contents-on-upload-with-paperclip-gem)有你所需要的。 –