library-picturebook-activity/oss-direct-upload-demo/frontend/env.ts
En b9ed5e17c6 feat: OSS 客户端直传改造(STS Token 签发 + 前端直传 + CORS 自动配置)
后端新增 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>
2026-04-08 15:19:43 +08:00

60 lines
1.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 环境工具函数
*
* 提供环境相关的配置,用于自动为 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}`;
}