Rails - 使用回形针上传zip文件并解压缩

时间:2012-11-08 11:27:27

标签: ruby-on-rails ruby upload paperclip unzip

我正在尝试使用 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

2 个答案:

答案 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方法并完成之后保存文件。我建议您在保存方法之后调用文件上的其他操作。

希望它有所帮助。