diff --git a/fs_attachment/models/ir_attachment.py b/fs_attachment/models/ir_attachment.py index d026fc88f8..a77c5eb717 100644 --- a/fs_attachment/models/ir_attachment.py +++ b/fs_attachment/models/ir_attachment.py @@ -237,7 +237,9 @@ def _get_datas_related_values(self, data, mimetype): "db_datas": data, } return values - return super()._get_datas_related_values(data, mimetype) + return super( + IrAttachment, self.with_context(mimetype=mimetype) + )._get_datas_related_values(data, mimetype) ########################################################### # Odoo methods that we override to use the object storage # @@ -368,6 +370,14 @@ def _storage_file_read(self, fname: str) -> bytes | None: with fs.open(fname, "rb") as f: return f.read() + def _storage_write_option(self, fs): + _fs = fs + while _fs: + if hasattr(_fs, "s3"): + return {"ContentType": self._context["mimetype"]} + _fs = getattr(_fs, "fs", None) + return {} + @api.model def _storage_file_write(self, bin_data: bytes) -> str: """Write the file to the filesystem storage""" @@ -378,7 +388,8 @@ def _storage_file_write(self, bin_data: bytes) -> str: if not fs.exists(dirname): fs.makedirs(dirname) fname = f"{storage}://{path}" - with fs.open(path, "wb") as f: + kwargs = self._storage_write_option(fs) + with fs.open(path, "wb", **kwargs) as f: f.write(bin_data) self._fs_mark_for_gc(fname) return fname