mirror of
				https://github.com/open-webui/open-webui
				synced 2025-06-26 18:26:48 +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 pydantic import BaseModel
 | 
			
		||||
import mimetypes
 | 
			
		||||
from urllib.parse import quote
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
            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 = {
 | 
			
		||||
                    "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)
 | 
			
		||||
 | 
			
		||||
            else:
 | 
			
		||||
                raise HTTPException(
 | 
			
		||||
                    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"):
 | 
			
		||||
        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:
 | 
			
		||||
            file_path = Storage.get_file(file_path)
 | 
			
		||||
            file_path = Path(file_path)
 | 
			
		||||
 | 
			
		||||
            # Check if the file already exists in the cache
 | 
			
		||||
            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)
 | 
			
		||||
            else:
 | 
			
		||||
                raise HTTPException(
 | 
			
		||||
@ -311,7 +320,7 @@ async def get_file_content_by_id(id: str, user=Depends(get_verified_user)):
 | 
			
		||||
            return StreamingResponse(
 | 
			
		||||
                generator(),
 | 
			
		||||
                media_type="text/plain",
 | 
			
		||||
                headers={"Content-Disposition": f"attachment; filename={file_name}"},
 | 
			
		||||
                headers=headers,
 | 
			
		||||
            )
 | 
			
		||||
    else:
 | 
			
		||||
        raise HTTPException(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user