2011-05-17 121 views
1

我上傳的軌道文件與下面的代碼:使用rails上傳文件時覆蓋?

name = upload['datafile'].original_filename 
directory = "public/data/#{id}/#{app_id}" 

Dir.mkdir("#{RAILS_ROOT}/public/data/#{id}/#{app_id}") 

path = File.join(directory, name) 

File.open(path, "wb") { |f| f.write(upload['datafile'].read) } 

有人可以告訴我,我怎麼能告訴軌,它應該覆蓋該文件時,它已經存在?

謝謝!

+0

這段代碼工作不適合你?有錯誤嗎? – muffinista 2011-05-17 17:58:37

+0

這段代碼可以工作,但是當o上傳兩次內容時,我得到一個錯誤「file exists」。 – Tronic 2011-05-17 18:00:21

回答

2

你應該檢查是否有目錄已經存在:

name = upload['datafile'].original_filename 
directory = "public/data/#{id}/#{app_id}" 

Dir.mkdir("#{RAILS_ROOT}/public/data/#{id}/#{app_id}") unless Dir.exist? "#{RAILS_ROOT}/public/data/#{id}/#{app_id}" 

path = File.join(directory, name) 

File.open(path, "wb") { |f| f.write(upload['datafile'].read) } 
+0

這個答案是正確的。解釋是:當您嘗試創建一個已經存在的*目錄*時,會出現錯誤Errno :: EEXIST:File exists',因此檢查目錄是否已經存在應該防止錯誤。 – Patrick 2014-03-12 10:12:18