diff --git a/addons/web/static/src/js/views/form_widgets.js b/addons/web/static/src/js/views/form_widgets.js index 25b4fbed8ba..515ba674eb7 100644 --- a/addons/web/static/src/js/views/form_widgets.js +++ b/addons/web/static/src/js/views/form_widgets.js @@ -1144,7 +1144,7 @@ var FieldBinary = common.AbstractField.extend(common.ReinitializeFieldMixin, { 'id': this.view.datarecord.id, 'field': this.name, 'filename_field': filename_fieldname, - 'filename': filename_field ? filename_field.get('value') : null, + 'filename': filename_field ? filename_field.get('value') : "", 'download': true, 'data': utils.is_bin_size(value) ? null : value, }, diff --git a/odoo/addons/base/ir/ir_http.py b/odoo/addons/base/ir/ir_http.py index df15e45df22..c01e6d4a4ea 100644 --- a/odoo/addons/base/ir/ir_http.py +++ b/odoo/addons/base/ir/ir_http.py @@ -303,9 +303,9 @@ class IrHttp(models.AbstractModel): if not filename: if filename_field in obj: filename = obj[filename_field] - elif module_resource_path: + if not filename and module_resource_path: filename = os.path.basename(module_resource_path) - else: + if not filename: filename = "%s-%s-%s" % (obj._name, obj.id, field) # mimetype @@ -320,6 +320,11 @@ class IrHttp(models.AbstractModel): if not mimetype: mimetype = guess_mimetype(base64.b64decode(content), default=default_mimetype) + # extension + extension = mimetypes.guess_extension(mimetype) + if extension and not filename.endswith(extension): + filename = "%s%s" % (filename, extension) + headers += [('Content-Type', mimetype), ('X-Content-Type-Options', 'nosniff')] # cache