我創建一個非常簡單的Web應用程序,允許用戶上傳的.zip文件,我暫時保存在我的應用程序內tmp的文件夾,使用壓縮文件解析的內容,然後刪除文件完成後。的Rails:權限遭拒,File.delete
我設法要上傳的文件,並將其複製到tmp文件夾,我可以成功地分析它,並得到我想要的結果,但是當我嘗試刪除該文件,我得到一個權限被拒絕的錯誤。
這裏是我的觀點:
<%= form_tag({action: :upload}, multipart: true) do %>
<%= file_field_tag :software %>
<br/><br/>
<%= submit_tag("UPLOAD") %>
<% end %>
這是我的控制器:
def upload
@file = params[:software]
@name = @file.original_filename
File.open(Rails.root.join('tmp', @name), 'wb') do |file|
file.write(@file.read)
end
parse
File.delete("tmp/#{@name}")
render action: "show"
end
我一直在使用FileUtils.rm ("tmp/#{@name}")
也嘗試過了,我也試着刪除過,但都無濟於事設置File.chmod(0777, "tmp/#{@name}")
。將刪除路徑更改爲Rails.root.join('tmp', @name)
(如File.open
塊)也不能解決問題。我可以通過控制檯完全刪除文件,所以我不知道可能是什麼問題。
編輯:parse方法:
def parse
require 'zip'
Zip::File.open("tmp/#{@nome}") do |zip_file|
srcmbffiles = File.join("**", "src", "**", "*.mbf")
entry = zip_file.glob(srcmbffiles).first
@stream = entry.get_input_stream.read
puts @stream
end
end
我只是想刪除前把'睡眠(30)'的權利,它仍然沒有好。是否有更正確的方法來等待寫作過程完成? – bpromas
確保文件在解析過程後關閉。 30毫秒可能沒有足夠的時間......你可能需要一個循環幾次,直到該文件系統與文件 –
這'sleep'功能在幾秒鐘內完成等待,使爲30秒......而我的'File.open '塊在結束時關閉文件,所以我不認爲這是不幸的。 – bpromas