如何在Zip::OutputStream中创建文件夹?



我想用文件夹创建一个zip文件目录或使用Ruby-on-Rails和Zip。

如何在Zip::OutputStream中创建文件夹或目录?

我现在拥有的

compressed_filestream = Zip::OutputStream.write_buffer do |zos|
zos.put_next_entry "letter.odt"
zos.write letter
zos.put_next_entry "spreadsheet.ods"
zos.write spreadsheet
zos.put_next_entry "essay.odt"
zos.write essay
end
compressed_filestream.rewind
send_data compressed_filestream.read, filename: "neuer_tn.zip"

这段代码生成了一个zip文件,我可以从中提取三个文件,分别称为"letter.odt"one_answers"spreadsheet.ods"one_answers"essay.odt".

现在,我希望前两个文件位于文件夹或目录内。当我提取zip文件时,我应该看到一个名为"信件和电子表格"的文件夹,其中两个文件在里面,一个文件在外面。我该怎么做呢?

下面的代码是可能的吗?

compressed_filestream = Zip::OutputStream.write_buffer do |zos|
zos.create_folder "letter and spreadsheet" do 

zos.put_next_entry "letter.odt"
zos.write letter
zos.put_next_entry "spreadsheet.ods"
zos.write spreadsheet
end
zos.put_next_entry "essay.odt"
zos.write essay
end
compressed_filestream.rewind
send_data compressed_filestream.read, filename: "neuer_tn.zip"

Rails 6.0.3.4,Ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]

这很简单,在put_next_entry调用中包含文件夹名称…

zos.put_next_entry "awesome_folder_here/letter.odt" 

你可以更深入…

zos.put_next_entry "awesome_folder_here/subfolder_too/letter.odt" 

而zip知道如何将它们组合在一起。

最新更新