0

我有一个功能,所有上传的文件都首先保存到 public/submitted_folder。现在对该功能的增强是用户可以查看所有上传的 zip 文件。我已经实现了允许用户下载文件的功能在 zip 格式中。现在我在这里遇到问题。我需要在下载后删除新生成的 zip 文件。我想扫描提交的文件夹以扫描是否存在任何 zip 文件然后删除它。我该怎么做。如果还有更多的子文件夹,例如 submit_folder/folder1/folder2,我如何扫描所有子文件夹以查找和删除任何 zip文件。我在 ruby​​ 中为 File 引用了 api,但很困惑......

4

2 回答 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

处理文件时,请尝试使用DirandFile方法。那里有很棒的教程可以帮助您入门,我建议您使用此截屏视频

关于你的问题

当您在正确的目录中时,抓取和删除 zip 文件很容易。

获取所有 zip 文件

files = Dir.glob("*.zip")

删除某个文件:

File.delete("#{file}")

提取文件有点棘手,我自己创建了一个文件夹,将所有提取的文件放入其中,然后从那里开始工作。您还需要rubyzipgem 来更好地处理 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 回答