gpt4 book ai didi

ruby-on-rails - Rails : Permission denied for File. 删除

转载 作者:行者123 更新时间:2023-12-04 05:50:08 25 4
gpt4 key购买 nike

我正在创建一个非常简单的网络应用程序,它允许用户上传一个 .zip 文件,我临时保存在我的应用程序内的 tmp 文件夹中,使用 zipfile 解析内容,然后在我完成后删除文件。

我设法上传文件并将其复制到 tmp 文件夹,我可以成功解析它并获得我想要的结果,但是当我尝试删除该文件时,我收到了权限被拒绝的错误。

这是我的观点:

<%= form_tag({action: :upload}, multipart: true) do %>
<%= file_field_tag :software %>
<br/><br/>
<%= submit_tag("UPLOAD") %>
<% end %>

这是我的 Controller :
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块也没有修复它。我可以通过控制台完全删除文件,所以我不知道是什么问题。

编辑:解析方法:
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

最佳答案

问题是由于某种原因,我的文件没有在 File.open 中被关闭以进行删除。块或 Zip::File.open堵塞。我的解决方案是手动关闭它并避免使用打开的块,更改此代码段:

File.open(Rails.root.join('tmp', @name), 'wb') do |file|
file.write(@file.read)
end

进入这个:
f = File.open(Rails.root.join('tmp', @nome), 'wb+') 
f.write(@file.read)
f.close

并从此更改我的解析方法:
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

对此:
def parse
require 'zip'
zf = Zip::File.open("tmp/#{@nome}")
srcmbffiles = File.join("**", "src", "**", "*.mbf")
entry = zf.glob(srcmbffiles).first
@stream = zf.read(entry)
puts @stream
zf.close()
end

请注意,我更改了填充方式 @stream因为显然 entry.get_input_stream还会锁定您正在访问的文件。

关于ruby-on-rails - Rails : Permission denied for File. 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30309254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com