[FIX] base: add extension to downloads without filenames

The filename can be obtained in 3 ways when downloading a file, in order:
- by the filename argument
- by the filename_field argument
- a default one is computed as backup.

In the last case, there is by construction no file extension.
The filename is made from the record's model name, id and field.
However the model name almost certainly contains a ".",
which is the standard extension separator for filenames.
As a result <model_name_end-id-field> is considered to be the existing
extension, so we don't try to guess it from the mimetype.

To keep the existing default filename convention, we always add the
guessed extension in this case.

opw 2149612

closes odoo/odoo#41924

X-original-commit: f62a49a2f83bcce66eb9c3b08687ee5a37def503
Signed-off-by: Nans Lefebvre (len) <len@odoo.com>
This commit is contained in:
Nans Lefebvre
2019-12-16 09:46:46 +00:00
parent 7a349da229
commit 87703fa58b
+3 -1
View File
@@ -376,10 +376,12 @@ class IrHttp(models.AbstractModel):
content = record[field] or ''
# filename
default_filename = False
if not filename:
if filename_field in record:
filename = record[filename_field]
if not filename:
default_filename = True
filename = "%s-%s-%s" % (record._name, record.id, field)
if not mimetype:
@@ -391,7 +393,7 @@ class IrHttp(models.AbstractModel):
# extension
_, existing_extension = os.path.splitext(filename)
if not existing_extension:
if not existing_extension or default_filename:
extension = mimetypes.guess_extension(mimetype)
if extension:
filename = "%s%s" % (filename, extension)