41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
import base64
|
|
from sys import prefix
|
|
|
|
from fastapi import File, UploadFile
|
|
from extension.standard import chat_file_manager
|
|
import json
|
|
from api.base import set_logger_config, response, app
|
|
|
|
|
|
@app.post("/api/file/upload")
|
|
@set_logger_config("/api/file/upload")
|
|
def upload_file(file: UploadFile = File(...)):
|
|
try:
|
|
file_name = file.filename
|
|
file_content = file.file.read()
|
|
file_id = chat_file_manager.c_create(file_name, file_content)
|
|
file.file.close()
|
|
if not file_id:
|
|
return response(status_code=500)
|
|
result = json.dumps({"file_id": file_id}, ensure_ascii=False).encode("utf-8")
|
|
return response(result, 200, {'Content-Type': 'application/json'})
|
|
except Exception as e:
|
|
return response(status_code=500)
|
|
|
|
|
|
@app.get("/api/file/download/{file_id}")
|
|
@set_logger_config("/api/file/download/{file_id}")
|
|
def download_file(file_id: str):
|
|
try:
|
|
content_type = "application/octet-stream"
|
|
file_content, postfix = chat_file_manager.c_get(file_id)
|
|
if postfix:
|
|
content_type = chat_file_manager.extension_mapping.get(postfix, "application/octet-stream")
|
|
return response(file_content, 200, {'Content-Type': content_type,
|
|
"Content-Disposition": f"attachment; filename={file_id}{postfix}"})
|
|
|
|
except FileNotFoundError:
|
|
return response(status_code=404)
|
|
except Exception as e:
|
|
return response(status_code=500)
|