diff --git a/README.md b/README.md
index 298bfea534..cba65bafc8 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ Available addons
----------------
addon | version | maintainers | summary
--- | --- | --- | ---
-[fs_attachment](fs_attachment/) | 18.0.2.2.0 |
| Store attachments on external object store
+[fs_attachment](fs_attachment/) | 18.0.2.2.1 |
| Store attachments on external object store
[fs_attachment_s3](fs_attachment_s3/) | 18.0.1.2.0 |
| Store attachments into S3 complient filesystem
[fs_file](fs_file/) | 18.0.1.0.0 |
| Field to store files into filesystem storages
[fs_folder](fs_folder/) | 18.0.2.0.0 |
| A module to link to Odoo records and manage from record forms forlders from external file systems
diff --git a/fs_attachment/README.rst b/fs_attachment/README.rst
index 74a6659c50..8ae6109789 100644
--- a/fs_attachment/README.rst
+++ b/fs_attachment/README.rst
@@ -11,7 +11,7 @@ Base Attachment Object Store
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:50c6082aeb8a70f8037fe7af4499b73d24c5e70f2fb76df63606559a6700108d
+ !! source digest: sha256:ae07154d0c96f19cbe1f6760cb690b0eefdea57af89985620fac1eef5d52f5fb
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
diff --git a/fs_attachment/__manifest__.py b/fs_attachment/__manifest__.py
index 5af9c1a3ab..38076afcc7 100644
--- a/fs_attachment/__manifest__.py
+++ b/fs_attachment/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Base Attachment Object Store",
"summary": "Store attachments on external object store",
- "version": "18.0.2.2.0",
+ "version": "18.0.2.2.1",
"author": "Camptocamp, ACSONE SA/NV, Odoo Community Association (OCA)",
"license": "AGPL-3",
"development_status": "Beta",
diff --git a/fs_attachment/models/ir_binary.py b/fs_attachment/models/ir_binary.py
index a784aec9df..d9ea167d02 100644
--- a/fs_attachment/models/ir_binary.py
+++ b/fs_attachment/models/ir_binary.py
@@ -1,12 +1,14 @@
# Copyright 2023 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import logging
+from mimetypes import guess_extension
import werkzeug.http
from odoo import models
from odoo.http import request
from odoo.tools.image import image_process
+from odoo.tools.mimetypes import get_extension
from ..fs_stream import FsStream
@@ -73,6 +75,12 @@ def _get_stream_from(
elif record and filename_field in record:
stream.download_name = record[filename_field] or stream.download_name
+ if (
+ not get_extension(stream.download_name)
+ and stream.mimetype != "application/octet-stream"
+ ):
+ stream.download_name += guess_extension(stream.mimetype) or ""
+
return stream
def _get_image_stream_from(
diff --git a/fs_attachment/static/description/index.html b/fs_attachment/static/description/index.html
index f1efd603d0..5c2b3e646c 100644
--- a/fs_attachment/static/description/index.html
+++ b/fs_attachment/static/description/index.html
@@ -372,7 +372,7 @@
In some cases, you need to store attachment in another system that the
diff --git a/fs_folder/i18n/fs_folder.pot b/fs_folder/i18n/fs_folder.pot
index 6e89a221bd..27e7040f7a 100644
--- a/fs_folder/i18n/fs_folder.pot
+++ b/fs_folder/i18n/fs_folder.pot
@@ -318,3 +318,9 @@ msgstr ""
#: code:addons/fs_folder/static/src/fs_folder/fs_folder.esm.js:0
msgid "User"
msgstr ""
+
+#. module: fs_folder
+#. odoo-javascript
+#: code:addons/fs_folder/static/src/preview_iframe/preview_iframe.xml:0
+msgid "X"
+msgstr ""
diff --git a/fs_folder/i18n/it.po b/fs_folder/i18n/it.po
index b53c3677e4..e163f97b61 100644
--- a/fs_folder/i18n/it.po
+++ b/fs_folder/i18n/it.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-10-21 08:43+0000\n"
+"PO-Revision-Date: 2026-04-13 11:45+0000\n"
"Last-Translator: mymage