mirror of
https://github.com/open-webui/open-webui
synced 2025-03-03 19:07:21 +00:00
fix: unicode file name
This commit is contained in:
parent
4a7c1d8d55
commit
35cdd43a31
@ -5,6 +5,7 @@ from pathlib import Path
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
import mimetypes
|
import mimetypes
|
||||||
|
from urllib.parse import quote
|
||||||
|
|
||||||
from open_webui.storage.provider import Storage
|
from open_webui.storage.provider import Storage
|
||||||
|
|
||||||
@ -222,11 +223,15 @@ async def get_file_content_by_id(id: str, user=Depends(get_verified_user)):
|
|||||||
|
|
||||||
# Check if the file already exists in the cache
|
# Check if the file already exists in the cache
|
||||||
if file_path.is_file():
|
if file_path.is_file():
|
||||||
print(f"file_path: {file_path}")
|
# Handle Unicode filenames
|
||||||
|
filename = file.meta.get("name", file.filename)
|
||||||
|
encoded_filename = quote(filename) # RFC5987 encoding
|
||||||
headers = {
|
headers = {
|
||||||
"Content-Disposition": f'attachment; filename="{file.meta.get("name", file.filename)}"'
|
"Content-Disposition": f"attachment; filename*=UTF-8''{encoded_filename}"
|
||||||
}
|
}
|
||||||
|
|
||||||
return FileResponse(file_path, headers=headers)
|
return FileResponse(file_path, headers=headers)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_404_NOT_FOUND,
|
status_code=status.HTTP_404_NOT_FOUND,
|
||||||
@ -283,16 +288,20 @@ async def get_file_content_by_id(id: str, user=Depends(get_verified_user)):
|
|||||||
|
|
||||||
if file and (file.user_id == user.id or user.role == "admin"):
|
if file and (file.user_id == user.id or user.role == "admin"):
|
||||||
file_path = file.path
|
file_path = file.path
|
||||||
|
|
||||||
|
# Handle Unicode filenames
|
||||||
|
filename = file.meta.get("name", file.filename)
|
||||||
|
encoded_filename = quote(filename) # RFC5987 encoding
|
||||||
|
headers = {
|
||||||
|
"Content-Disposition": f"attachment; filename*=UTF-8''{encoded_filename}"
|
||||||
|
}
|
||||||
|
|
||||||
if file_path:
|
if file_path:
|
||||||
file_path = Storage.get_file(file_path)
|
file_path = Storage.get_file(file_path)
|
||||||
file_path = Path(file_path)
|
file_path = Path(file_path)
|
||||||
|
|
||||||
# Check if the file already exists in the cache
|
# Check if the file already exists in the cache
|
||||||
if file_path.is_file():
|
if file_path.is_file():
|
||||||
print(f"file_path: {file_path}")
|
|
||||||
headers = {
|
|
||||||
"Content-Disposition": f'attachment; filename="{file.meta.get("name", file.filename)}"'
|
|
||||||
}
|
|
||||||
return FileResponse(file_path, headers=headers)
|
return FileResponse(file_path, headers=headers)
|
||||||
else:
|
else:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
@ -311,7 +320,7 @@ async def get_file_content_by_id(id: str, user=Depends(get_verified_user)):
|
|||||||
return StreamingResponse(
|
return StreamingResponse(
|
||||||
generator(),
|
generator(),
|
||||||
media_type="text/plain",
|
media_type="text/plain",
|
||||||
headers={"Content-Disposition": f"attachment; filename={file_name}"},
|
headers=headers,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
|
Loading…
Reference in New Issue
Block a user