fix: Use File URL to set file type as File Name is not reliable

This commit is contained in:
marination 2023-08-08 20:11:00 +05:30
parent 7bb81d710c
commit ea4dbedbab
2 changed files with 11 additions and 9 deletions

View file

@ -336,7 +336,7 @@ class File(Document):
if self.is_folder:
return
file_type = mimetypes.guess_type(self.file_name)[0]
file_type = mimetypes.guess_type(self.file_url)[0]
if not file_type:
return

View file

@ -7,26 +7,28 @@ def execute():
"""Set 'File Type' for all files based on file extension."""
files = frappe.db.get_all(
"File",
fields=["name", "file_name", "is_folder"],
fields=["name", "file_url"],
filters={
"is_folder": 0,
"file_type": ("is", "not set")
},
)
frappe.db.auto_commit_on_many_writes = 1
for file in files:
if file.get("is_folder"):
continue
file_extension = get_file_extension(file.get("file_name"))
# File URL could be relative to site's public folder or a web URL
file_extension = get_file_extension(file.file_url)
if file_extension:
frappe.db.set_value(
"File", file.get("name"), "file_type", file_extension, update_modified=False
"File", file.name, "file_type", file_extension, update_modified=False
)
frappe.db.auto_commit_on_many_writes = 0
def get_file_extension(file_name):
file_type = mimetypes.guess_type(file_name)[0]
def get_file_extension(file_url):
file_type = mimetypes.guess_type(file_url)[0]
if not file_type:
return None