From ac928f263a29e8995c203b67373d5c2a33fcfaa1 Mon Sep 17 00:00:00 2001 From: Nikhil <118773738+pablohashescobar@users.noreply.github.com> Date: Tue, 15 Jul 2025 13:24:17 +0530 Subject: [PATCH] [WIKI-520] fix: update content disposition handling in asset download endpoints (#7380) --- apps/api/plane/app/views/asset/v2.py | 6 ++++-- apps/api/plane/settings/storage.py | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/api/plane/app/views/asset/v2.py b/apps/api/plane/app/views/asset/v2.py index 5994ffd8c..7e0c14fdd 100644 --- a/apps/api/plane/app/views/asset/v2.py +++ b/apps/api/plane/app/views/asset/v2.py @@ -740,7 +740,8 @@ class WorkspaceAssetDownloadEndpoint(BaseAPIView): storage = S3Storage(request=request) signed_url = storage.generate_presigned_url( object_name=asset.asset.name, - disposition=f"attachment; filename={asset.asset.name}", + disposition="attachment", + filename=asset.attributes.get("name", uuid.uuid4().hex), ) return HttpResponseRedirect(signed_url) @@ -767,7 +768,8 @@ class ProjectAssetDownloadEndpoint(BaseAPIView): storage = S3Storage(request=request) signed_url = storage.generate_presigned_url( object_name=asset.asset.name, - disposition=f"attachment; filename={asset.asset.name}", + disposition="attachment", + filename=asset.attributes.get("name", uuid.uuid4().hex), ) return HttpResponseRedirect(signed_url) diff --git a/apps/api/plane/settings/storage.py b/apps/api/plane/settings/storage.py index f2be261ad..71709ebe0 100644 --- a/apps/api/plane/settings/storage.py +++ b/apps/api/plane/settings/storage.py @@ -1,5 +1,6 @@ # Python imports import os +import uuid # Third party imports import boto3 @@ -101,6 +102,9 @@ class S3Storage(S3Boto3Storage): def _get_content_disposition(self, disposition, filename=None): """Helper method to generate Content-Disposition header value""" + if filename is None: + filename = uuid.uuid4().hex + if filename: # Encode the filename to handle special characters encoded_filename = quote(filename)