diff --git a/addons/website_sale_digital/controllers/main.py b/addons/website_sale_digital/controllers/main.py index c9708912a67..3a5b1434ddb 100644 --- a/addons/website_sale_digital/controllers/main.py +++ b/addons/website_sale_digital/controllers/main.py @@ -3,6 +3,8 @@ import base64 import io +import os +import mimetypes from werkzeug.utils import redirect from odoo import http @@ -71,7 +73,7 @@ class WebsiteSaleDigital(CustomerPortal): # Check if this is a valid attachment id attachment = request.env['ir.attachment'].sudo().search_read( [('id', '=', int(attachment_id))], - ["name", "datas", "file_type", "res_model", "res_id", "type", "url"] + ["name", "datas", "datas_fname", "mimetype", "res_model", "res_id", "type", "url"] ) if attachment: @@ -105,6 +107,11 @@ class WebsiteSaleDigital(CustomerPortal): return request.not_found() elif attachment["datas"]: data = io.BytesIO(base64.standard_b64decode(attachment["datas"])) - return http.send_file(data, filename=attachment['name'], as_attachment=True) + # we follow what is done in ir_http's binary_content for the extension management + extension = os.path.splitext(attachment["datas_fname"] or '')[1] + extension = extension if extension else mimetypes.guess_extension(attachment["mimetype"] or '') + filename = attachment['name'] + filename = filename if os.path.splitext(filename)[1] else filename + extension + return http.send_file(data, filename=filename, as_attachment=True) else: return request.not_found()