我有一个功能,所有上传的文件都首先保存到 public/submitted_folder。现在对该功能的增强是用户可以查看所有上传的 zip 文件。我已经实现了允许用户下载文件的功能在 zip 格式中。现在我在这里遇到问题。我需要在下载后删除新生成的 zip 文件。我想扫描提交的文件夹以扫描是否存在任何 zip 文件然后删除它。我该怎么做。如果还有更多的子文件夹,例如 submit_folder/folder1/folder2,我如何扫描所有子文件夹以查找和删除任何 zip文件。我在 ruby 中为 File 引用了 api,但很困惑......
问问题
1160 次
2 回答
1
假设您使用的是 linux,您可以从 ruby 执行 bash 命令。
以下是删除路径“path”(包括子目录)下所有扩展名为 .zip 的文件的 linux 命令
find path -type f -name *.zip -delete
使用从应用程序执行它
system("find path -type f -name *.zip -delete")
或者
`find path -type f -name *.zip -delete`
于 2013-08-29T14:22:49.343 回答
0
处理文件时,请尝试使用Dir
andFile
方法。那里有很棒的教程可以帮助您入门,我建议您使用此截屏视频。
关于你的问题
当您在正确的目录中时,抓取和删除 zip 文件很容易。
获取所有 zip 文件
files = Dir.glob("*.zip")
删除某个文件:
File.delete("#{file}")
提取文件有点棘手,我自己创建了一个文件夹,将所有提取的文件放入其中,然后从那里开始工作。您还需要rubyzip
gem 来更好地处理 ZIP 文件。
require 'zip/zip'
# creates a directory with a name
Dir.mkdir("#{Dir.pwd}/#{name}") unless File.exists?("#{Dir.pwd}/#{name}")
# opens up the zip file
zipfile = Zip::ZipFile::open(Dir.pwd + "/" + zip_path)
# changes the working directory to the newly created folder
Dir.chdir "#{name}"
# unzips the zip and returns the xml files in it
files = []
zipfile.each do |file|
zipfile.extract(file, "#{Dir.pwd}/#{file.name}") unless File.exists?("#{Dir.pwd}/#{file.name}")
end
编辑
事实证明,有一个简单的函数可以搜索当前目录和所有子目录。**
成为关键
all_zip_files = Dir.glob("**/*.zip")
获取这些文件后,您可以提取、删除或做任何您想做的事情 :)
于 2013-08-29T14:36:32.107 回答