fix: encode non-ASCII filename in Content-Disposition header
Use RFC 5987 filename*=UTF-8'' percent-encoding to support Chinese and other Unicode characters in DOCX download filenames. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
"""Format conversion endpoints."""
|
"""Format conversion endpoints."""
|
||||||
|
|
||||||
|
from urllib.parse import quote
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, HTTPException
|
from fastapi import APIRouter, Depends, HTTPException
|
||||||
from fastapi.responses import Response
|
from fastapi.responses import Response
|
||||||
|
|
||||||
@@ -34,10 +36,11 @@ async def convert_markdown_to_docx(
|
|||||||
request.filename,
|
request.filename,
|
||||||
len(docx_bytes),
|
len(docx_bytes),
|
||||||
)
|
)
|
||||||
|
encoded_name = quote(f"{request.filename}.docx")
|
||||||
return Response(
|
return Response(
|
||||||
content=docx_bytes,
|
content=docx_bytes,
|
||||||
media_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
media_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
||||||
headers={"Content-Disposition": f'attachment; filename="{request.filename}.docx"'},
|
headers={"Content-Disposition": f"attachment; filename*=UTF-8''{encoded_name}"},
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception("DOCX conversion failed, filename=%s: %s", request.filename, e)
|
logger.exception("DOCX conversion failed, filename=%s: %s", request.filename, e)
|
||||||
|
|||||||
Reference in New Issue
Block a user