From 69797574a8883c896978282021ed1cbeb4190c59 Mon Sep 17 00:00:00 2001 From: networkException Date: Fri, 16 Jan 2026 23:58:59 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B(backend)=20properly=20encode=20att?= =?UTF-8?q?achment=20upload=20content-disposition=20header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch changes the Content-Disposition header set on S3 PutObject requests when uploading attachments to be encoded using a Django helper, properly encoding UTF-8 in filenames. This fixes compatibility for uploading attachments with non ASCII file names to Garage, since the HTTP library used by Garage validates that HTTP Headers are ASCII only. Signed-off-by: networkException --- src/backend/core/api/viewsets.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/backend/core/api/viewsets.py b/src/backend/core/api/viewsets.py index c4a137eed6..ad9cbfa64b 100644 --- a/src/backend/core/api/viewsets.py +++ b/src/backend/core/api/viewsets.py @@ -27,6 +27,7 @@ from django.utils import timezone from django.utils.decorators import method_decorator from django.utils.functional import cached_property +from django.utils.http import content_disposition_header from django.utils.text import capfirst, slugify from django.utils.translation import gettext_lazy as _ @@ -1426,11 +1427,11 @@ def attachment_upload(self, request, *args, **kwargs): or serializer.validated_data["is_unsafe"] ): extra_args.update( - {"ContentDisposition": f'attachment; filename="{file_name:s}"'} + {"ContentDisposition": content_disposition_header(as_attachment=True, filename=file_name)} ) else: extra_args.update( - {"ContentDisposition": f'inline; filename="{file_name:s}"'} + {"ContentDisposition": content_disposition_header(as_attachment=False, filename=file_name)} ) file = serializer.validated_data["file"]