Merge pull request #15253 from netchampfaris/zip-files

feat: Zip files
This commit is contained in:
Faris Ansari 2021-12-10 17:24:55 +05:30 committed by GitHub
commit f74b9be2c3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 0 deletions

View file

@ -569,6 +569,24 @@ class File(Document):
frappe.local.rollback_observers.append(self)
self.save()
@staticmethod
def zip_files(files):
from six import string_types
zip_file = io.BytesIO()
zf = zipfile.ZipFile(zip_file, "w", zipfile.ZIP_DEFLATED)
for _file in files:
if isinstance(_file, string_types):
_file = frappe.get_doc("File", _file)
if not isinstance(_file, File):
continue
if _file.is_folder:
continue
zf.writestr(_file.file_name, _file.get_content())
zf.close()
return zip_file.getvalue()
def on_doctype_update():
frappe.db.add_index("File", ["attached_to_doctype", "attached_to_name"])
@ -612,6 +630,16 @@ def move_file(file_list, new_parent, old_parent):
frappe.get_doc("File", old_parent).save()
frappe.get_doc("File", new_parent).save()
@frappe.whitelist()
def zip_files(files):
files = frappe.parse_json(files)
zipped_files = File.zip_files(files)
frappe.response["filename"] = "files.zip"
frappe.response["filecontent"] = zipped_files
frappe.response["type"] = "download"
def setup_folder_path(filename, new_parent):
file = frappe.get_doc("File", filename)
file.folder = new_parent

View file

@ -169,6 +169,15 @@ frappe.views.FileView = class FileView extends frappe.views.ListView {
frappe.file_manager.paste(this.current_folder)
)
.hide();
this.page.add_actions_menu_item(__('Export as zip'), () => {
let docnames = this.get_checked_items(true);
if (docnames.length) {
open_url_post('/api/method/frappe.core.doctype.file.file.zip_files', {
files: JSON.stringify(docnames)
});
}
});
}
set_fields() {