后端新增 OssUtils/OssTokenVo/OssCorsInitRunner,通过 STS 临时凭证实现客户端直传 OSS; 前端 upload API 适配直传流程,赛事创建/作品提交/作业/富文本编辑器均已切换; 多环境(dev/test/prod) OSS 配置补全;新增 oss-direct-upload-demo 示例项目及 E2E 测试。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
/**
|
||
* 环境工具函数
|
||
*
|
||
* 提供环境相关的配置,用于自动为 OSS 路径添加环境前缀(dev/test/prod)。
|
||
* 这样不同环境的文件会存储在不同的目录下,互不干扰。
|
||
*/
|
||
|
||
/**
|
||
* OSS 环境前缀映射
|
||
*
|
||
* 根据你的项目环境变量名修改此映射。
|
||
* Vite 默认使用 import.meta.env.MODE,值通常为 development / test / production。
|
||
*/
|
||
const OSS_ENV_PREFIX_MAP: Record<string, string> = {
|
||
development: "dev",
|
||
test: "test",
|
||
production: "prod",
|
||
};
|
||
|
||
/**
|
||
* 获取当前 Vite 环境
|
||
*/
|
||
export function getViteEnv(): string {
|
||
return import.meta.env.MODE || "development";
|
||
}
|
||
|
||
/**
|
||
* 获取 OSS 环境前缀
|
||
*
|
||
* @returns OSS 环境前缀(dev/test/prod)
|
||
*/
|
||
export function getOssEnvPrefix(): string {
|
||
const env = getViteEnv();
|
||
return OSS_ENV_PREFIX_MAP[env] || "dev";
|
||
}
|
||
|
||
/**
|
||
* 构建完整的 OSS 目录路径
|
||
*
|
||
* @param bizDir 业务目录(如:avatar, course/cover)
|
||
* @returns 完整目录路径(如:dev/avatar, test/course/cover)
|
||
*
|
||
* @example
|
||
* buildOssDirPath("avatar") // 开发环境 → "dev/avatar"
|
||
* buildOssDirPath("course/cover") // 测试环境 → "test/course/cover"
|
||
* buildOssDirPath() // 生产环境 → "prod"
|
||
*/
|
||
export function buildOssDirPath(bizDir?: string): string {
|
||
const envPrefix = getOssEnvPrefix();
|
||
|
||
if (!bizDir) {
|
||
return envPrefix;
|
||
}
|
||
|
||
// 移除 bizDir 开头可能存在的环境前缀,避免重复
|
||
const cleanBizDir = bizDir.replace(/^(dev|test|prod)\//, "");
|
||
|
||
return `${envPrefix}/${cleanBizDir}`;
|
||
}
|