fix: force download files based on extension even on development server

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
This commit is contained in:
Akhil Narang 2026-01-09 19:37:08 +05:30
parent c14e9d5d20
commit e0e69a495c
No known key found for this signature in database
GPG key ID: 9DCC61E211BF645F

View file

@ -8,12 +8,27 @@ from werkzeug.middleware.shared_data import SharedDataMiddleware
import frappe import frappe
from frappe.utils import cstr, get_site_name from frappe.utils import cstr, get_site_name
from frappe.utils.response import FORCE_DOWNLOAD_EXTENSIONS
class StaticDataMiddleware(SharedDataMiddleware): class StaticDataMiddleware(SharedDataMiddleware):
def __call__(self, environ, start_response): def __call__(self, environ, start_response):
self.environ = environ self.environ = environ
return super().__call__(environ, start_response)
def patch_start_response(status, headers, exc_info=None):
if (
(path := environ.get("PATH_INFO", ""))
and path.startswith("/files/")
and path.lower().endswith(FORCE_DOWNLOAD_EXTENSIONS)
):
from urllib.parse import quote
filename = Path(path).name
headers.append(("Content-Disposition", f"attachment; filename*=UTF-8''{quote(filename)}"))
return start_response(status, headers, exc_info)
return super().__call__(environ, patch_start_response)
def get_directory_loader(self, directory): def get_directory_loader(self, directory):
def loader(path): def loader(path):