zhangxiao
2024-10-23 81d420d88e87ccbbe3b0e7681bea17f31239fcdb
app/api/__init__.py
@@ -1,3 +1,6 @@
import urllib
from urllib.parse import urlencode
import jwt
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
@@ -19,6 +22,12 @@
    code: int = 200
    msg: str = ""
    data: dict = {}
class ResponseList(BaseModel):
    code: int = 200
    msg: str = ""
    data: list[dict] = []
def get_current_user(token: str = Depends(oauth2_scheme)):
@@ -48,11 +57,10 @@
async def get_current_user_websocket(websocket: WebSocket):
    auth_header = websocket.headers.get('Authorization')
    if auth_header is None or not auth_header.startswith('Bearer '):
    token = websocket.query_params.get('token')
    if token is None:
        await websocket.close(code=1008)
        raise WebSocketDisconnect(code=status.WS_1008_POLICY_VIOLATION)
    token = auth_header[len('Bearer '):]
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
        username: str = payload.get("sub")
@@ -68,3 +76,44 @@
        print(e)
        await websocket.close(code=1008)
        raise WebSocketDisconnect(code=status.WS_1008_POLICY_VIOLATION)
def format_file_url(agent_id: str, file_url: str, doc_id: str = None, doc_name: str = None) -> str:
    if file_url:
        # 对 file_url 进行 URL 编码
        encoded_file_url = urllib.parse.quote(file_url, safe=':/')
        return f"./api/files/download/?url={encoded_file_url}&agent_id={agent_id}"
    if doc_id:
        # 对 doc_id 和 doc_name 进行 URL 编码
        encoded_doc_id = urllib.parse.quote(doc_id, safe='')
        encoded_doc_name = urllib.parse.quote(doc_name, safe='')
        return f"./api/files/download/?doc_id={encoded_doc_id}&doc_name={encoded_doc_name}&agent_id={agent_id}"
    return file_url
def process_files(files, agent_id):
    """
    处理文件列表,格式化每个文件的 URL。
    :param files: 文件列表,每个文件是一个字典
    :param agent_id: 代理 ID
    """
    if not files:
        return  # 如果文件列表为空,直接返回
    for file in files:
        if "file_url" in file and file["file_url"]:
            try:
                file["file_url"] = format_file_url(agent_id, file["file_url"])
            except Exception as e:
                # 记录异常信息,但继续处理其他文件
                print(f"Error processing file URL: {e}")
if __name__=="__main__":
    files1 = [{"file_url": "aaa.com"}, {"file_url":"bbb.com"}]
    print(files1)
    process_files(files1,11111)
    print(files1)