main
HuangHai 4 months ago
parent f09d0809a1
commit cecc04859e

@ -4,4 +4,7 @@ jieba==0.42.1
pymilvus==2.5.6
aiomysql==0.2.0
numpy==1.23.5
alibabacloud_imagerecog20190930==2.0.10
alibabacloud_imagerecog20190930==2.0.10
alibabacloud_tea_openapi==0.0.2
alibabacloud_sts20150401==1.1.4
alibabacloud_credentials==2.2.1

@ -4,17 +4,17 @@ import time
import uuid
from contextlib import asynccontextmanager
from fastapi import FastAPI, Form, HTTPException, Query
from fastapi import FastAPI, Form, HTTPException
from openai import AsyncOpenAI
from WxMini.Milvus.Config.MulvusConfig import *
from WxMini.Milvus.Utils.MilvusCollectionManager import MilvusCollectionManager
from WxMini.Milvus.Utils.MilvusConnectionPool import *
from WxMini.Utils.EmbeddingUtil import text_to_embedding
from WxMini.Utils.MySQLUtil import init_mysql_pool, save_chat_to_mysql, get_chat_log_by_session, update_risk, \
get_last_chat_log_id, get_user_by_login_name, get_chat_logs_by_risk_flag
from WxMini.Utils.OssUtil import upload_mp3_to_oss_from_memory
from WxMini.Utils.TtsUtil import TTS
from WxMini.Utils.MySQLUtil import init_mysql_pool, save_chat_to_mysql, get_chat_log_by_session, update_risk, \
get_last_chat_log_id, get_user_by_login_name, get_chat_logs_by_risk_flag
from WxMini.Utils.EmbeddingUtil import text_to_embedding
# 配置日志
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")

@ -0,0 +1,52 @@
import json
from alibabacloud_sts20150401 import models as sts_20150401_models
from alibabacloud_sts20150401.client import Client as Sts20150401Client
from alibabacloud_tea_openapi.models import Config
# https://help.aliyun.com/zh/oss/use-cases/add-signatures-on-the-client-by-using-javascript-and-upload-data-to-oss?spm=a2c4g.11186623.help-menu-31815.d_6_1_0_1.2dd15d03SrLg4Q#4f036801celh7
# 配置阿里云 AccessKey 和 RAM 角色 ARN
access_key_id = "LTAI5tJrhwuBzF2X9USrzubX"
access_key_secret = "I6ezLuYhk9z9MRjXD2q99STSpTONwW"
role_arn_for_oss_upload = "acs:ram::1546399445482588:role/huanghai-create-role" # RAM 角色 ARN
# 替换为实际的 bucket 名称和 region-id
BUCKET_NAME = 'hzkc'
REGION_ID = 'cn-beijing'
ENDPOINT = 'https://oss-cn-beijing.aliyuncs.com'
OSS_PREFIX = "https://hzkc.oss-cn-beijing.aliyuncs.com/"
host = OSS_PREFIX
expire_time = 3600 # 指定过期时间,单位为秒
upload_dir = 'dir' # 指定上传到 OSS 的文件前缀
role_session_name = 'role_session_name' # 自定义会话名称
# 直接使用 access_key_id 和 access_key_secret 初始化 Config
config = Config(
region_id=REGION_ID,
access_key_id=access_key_id,
access_key_secret=access_key_secret
)
# 创建 STS 客户端并获取临时凭证
sts_client = Sts20150401Client(config=config)
assume_role_request = sts_20150401_models.AssumeRoleRequest(
role_arn=role_arn_for_oss_upload,
role_session_name=role_session_name
)
response = sts_client.assume_role(assume_role_request)
token = json.dumps(response.body.credentials.to_map())
# 将 JSON 字符串解析为 Python 字典
token_dict = json.loads(token)
# 提取字段
access_key_id = token_dict['AccessKeyId']
access_key_secret = token_dict['AccessKeySecret']
expiration = token_dict['Expiration']
security_token = token_dict['SecurityToken']
# 打印提取的字段
print(f"AccessKeyId: {access_key_id}")
print(f"AccessKeySecret: {access_key_secret}")
print(f"Expiration: {expiration}")
print(f"SecurityToken: {security_token}")

@ -0,0 +1,68 @@
import base64
import time
import oss2
from oss2.models import PolicyConditions # 确保正确导入 PolicyConditions
from typing import Dict
class AliUtil:
def __init__(self):
# 从配置中读取阿里云 OSS 的配置
self.endpoint = "your_endpoint" # 替换为你的 OSS endpoint
self.access_key_id = "your_access_key_id" # 替换为你的 AccessKeyId
self.access_key_secret = "your_access_key_secret" # 替换为你的 AccessKeySecret
def get_signature(self, bucket_name: str) -> Dict[str, str]:
"""
获取临时访问 OSS 的签名
:param bucket_name: bucket 名称由前端传入上传不同文件到不同文件夹
:return: 包含签名信息的字典
"""
resp_map = {}
# host 的格式为 bucketName.endpoint
host = f"https://{bucket_name}.{self.endpoint}"
# callbackUrl 为上传回调服务器的 URL请将下面的 IP 和 Port 配置为您自己的真实信息。
callback_url = ""
dir = "" # 用户上传文件时指定的前缀。
# 初始化 OSS 客户端
auth = oss2.Auth(self.access_key_id, self.access_key_secret)
bucket = oss2.Bucket(auth, self.endpoint, bucket_name)
try:
# 设置过期时间为半小时 (1800 秒)
expire_time = 60 * 30
expire_end_time = int(time.time()) + expire_time
# 设置 Policy 条件
policy_conditions = PolicyConditions()
policy_conditions.add_condition(PolicyConditions.CONTENT_LENGTH_RANGE, 0, 1048576000) # 文件大小限制
policy_conditions.add_condition(PolicyConditions.STARTS_WITH, PolicyConditions.KEY, dir) # 文件前缀
# 生成 Post Policy
post_policy = bucket._make_post_policy(expire_end_time, policy_conditions)
encoded_policy = base64.b64encode(post_policy.encode('utf-8')).decode('utf-8')
# 计算签名
post_signature = bucket._make_post_signature(post_policy)
# 构建返回的签名信息
resp_map["accessid"] = self.access_key_id
resp_map["policy"] = encoded_policy
resp_map["signature"] = post_signature
resp_map["dir"] = dir
resp_map["host"] = host
resp_map["expire"] = str(expire_end_time)
# 构建回调信息
callback_body = {
"callbackUrl": callback_url,
"callbackBody": "filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}",
"callbackBodyType": "application/x-www-form-urlencoded"
}
base64_callback_body = base64.b64encode(str(callback_body).encode('utf-8')).decode('utf-8')
resp_map["callback"] = base64_callback_body
except Exception as e:
print(f"Error: {e}")
return resp_map
Loading…
Cancel
Save