我正在尝试使用 rails 和 paperclip gem上传zip文件,到目前为止它工作正常。 但是下载完成后,我想解压缩这个文件并对里面的文件做一些事情。
当我尝试解压缩文件时出现问题,因为它不在它自己的路径中,可能是它被复制但没有完成。 (我在本地主机,在线模式更糟糕。)
所以,我需要某种事件/触发器来知道文件何时完成上传以开始解压缩。同时,展示一些界面。 控制器的代码如下:
# POST /components
# POST /components.json
def create
@component = Component.new(params[:component])
file = @component.folder
Zip::ZipFile.open(file.path) do |zipfile| # <-- The error comes here
zipfile.each do |file|
# do something with file
end
end
respond_to do |format|
if @component.save
format.html { redirect_to @component, notice: 'Component was successfully created.' }
format.json { render json: @component, status: :created, location: @component }
else
format.html { render action: "new" }
format.json { render json: @component.errors, status: :unprocessable_entity }
end
end
end
答案 0 :(得分:1)
这是一个解压缩功能,在您的情况下可能会有所帮助,看看这是否适合您。
def create_photos_from_zip logger.debug&#34; create_photos_from_zip - &gt;&#34; zip = params [:zip] logger.debug&#34;解压缩文件#{zip.path} class#{zip.class}&#34;
dir = File.join(RAILS_ROOT,"public","events","temp",current_user.name)
FileUtils.mkdir_p(dir)
Zip::ZipFile.open(zip.path).each do |entry|
# entry is a Zip::Entry
filename = File.join(dir,entry.name)
logger.debug "will extract file to #{filename} to"
entry.extract(filename)
p = File.new(filename)
photo = Photo.create(:photo=>p)
photo.title = "nova imagem"
@event.photos << photo
p.close
FileUtils.remove_file(filename)
end
#delete zip file
logger.debug "closing/deleting zip file #{zip.path}"
zip.close
FileUtils.remove_file(zip.path)
logger.debug "saving the event to database"
logger.debug "create_photos_from_zip <--"
端
答案 1 :(得分:0)
不确定这是否会有所帮助,因为我自己正在努力使用回形针,但现在就去了。
我希望在调用save方法并完成之后保存文件。我建议您在保存方法之后调用文件上的其他操作。
希望它有所帮助。