main
HuangHai 4 months ago
parent f09d0809a1
commit cecc04859e

@ -5,3 +5,6 @@ pymilvus==2.5.6
aiomysql==0.2.0 aiomysql==0.2.0
numpy==1.23.5 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 import uuid
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from fastapi import FastAPI, Form, HTTPException, Query from fastapi import FastAPI, Form, HTTPException
from openai import AsyncOpenAI from openai import AsyncOpenAI
from WxMini.Milvus.Config.MulvusConfig import * from WxMini.Milvus.Config.MulvusConfig import *
from WxMini.Milvus.Utils.MilvusCollectionManager import MilvusCollectionManager from WxMini.Milvus.Utils.MilvusCollectionManager import MilvusCollectionManager
from WxMini.Milvus.Utils.MilvusConnectionPool import * from WxMini.Milvus.Utils.MilvusConnectionPool import *
from WxMini.Utils.OssUtil import upload_mp3_to_oss_from_memory from WxMini.Utils.EmbeddingUtil import text_to_embedding
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, \ 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 get_last_chat_log_id, get_user_by_login_name, get_chat_logs_by_risk_flag
from WxMini.Utils.EmbeddingUtil import text_to_embedding from WxMini.Utils.OssUtil import upload_mp3_to_oss_from_memory
from WxMini.Utils.TtsUtil import TTS
# 配置日志 # 配置日志
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") 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