diff --git a/frappe/public/js/frappe/upload.js b/frappe/public/js/frappe/upload.js index c5ed49f29c..c913825b67 100644 --- a/frappe/public/js/frappe/upload.js +++ b/frappe/public/js/frappe/upload.js @@ -296,26 +296,38 @@ frappe.upload = { if (opts.no_socketio || frappe.flags.no_socketio || file_not_big_enough) { upload_with_filedata(); return; + } else { + args.file_size = fileobj.size; + frappe.call({ + method: 'frappe.utils.file_manager.validate_filename', + args: {"filename": args.filename}, + callback: function(r) { + args.filename = r.message; + upload_through_socketio(); + } + }); } - frappe.socketio.uploader.start({ - file: fileobj, - filename: args.filename, - is_private: args.is_private, - fallback: () => { - // if fails, use old filereader - upload_with_filedata(); - }, - callback: (data) => { - args.file_url = data.file_url; - frappe.upload._upload_file(fileobj, args, opts); - }, - on_progress: (percent_complete) => { - let increment = (flt(percent_complete) / frappe.upload.total_files); - frappe.show_progress(__('Uploading'), - start_complete + increment); - } - }); + var upload_through_socketio = function() { + frappe.socketio.uploader.start({ + file: fileobj, + filename: args.filename, + is_private: args.is_private, + fallback: () => { + // if fails, use old filereader + upload_with_filedata(); + }, + callback: (data) => { + args.file_url = data.file_url; + frappe.upload._upload_file(fileobj, args, opts); + }, + on_progress: (percent_complete) => { + let increment = (flt(percent_complete) / frappe.upload.total_files); + frappe.show_progress(__('Uploading'), + start_complete + increment); + } + }); + } }, upload_to_server: function(file, args, opts) { diff --git a/frappe/utils/file_manager.py b/frappe/utils/file_manager.py index a62f04eb10..638637b9ee 100644 --- a/frappe/utils/file_manager.py +++ b/frappe/utils/file_manager.py @@ -84,6 +84,7 @@ def save_url(file_url, filename, dt, dn, folder, is_private, df=None): # return None, None file_url = unquote(file_url) + file_size = frappe.form_dict.file_size f = frappe.get_doc({ "doctype": "File", @@ -93,6 +94,7 @@ def save_url(file_url, filename, dt, dn, folder, is_private, df=None): "attached_to_name": dn, "attached_to_field": df, "folder": folder, + "file_size": file_size, "is_private": is_private }) f.flags.ignore_permissions = True @@ -392,3 +394,8 @@ def get_random_filename(extn=None, content_type=None): extn = mimetypes.guess_extension(content_type) return random_string(7) + (extn or "") + +@frappe.whitelist() +def validate_filename(filename): + fname = get_file_name(filename, hashlib.md5(filename).hexdigest()[-6:]) + return fname