diff --git a/.gitignore b/.gitignore
index 068756bd..7b6d4765 100644
--- a/.gitignore
+++ b/.gitignore
@@ -66,9 +66,9 @@ temp/
*.sqlite
*.db
-# 上传文件目录
-uploads/
-upload/
+# 上传文件目录(只忽略根目录下的)
+/uploads/
+/upload/
# 小程序相关
honey_box/unpackage/
diff --git a/server/HoneyBox/src/HoneyBox.Admin.Business/Models/Upload/UploadModels.cs b/server/HoneyBox/src/HoneyBox.Admin.Business/Models/Upload/UploadModels.cs
new file mode 100644
index 00000000..3ec978c2
--- /dev/null
+++ b/server/HoneyBox/src/HoneyBox.Admin.Business/Models/Upload/UploadModels.cs
@@ -0,0 +1,119 @@
+namespace HoneyBox.Admin.Business.Models.Upload;
+
+///
+/// 上传响应模型
+///
+public class UploadResponse
+{
+ ///
+ /// 文件URL
+ ///
+ public string Url { get; set; } = string.Empty;
+
+ ///
+ /// 文件名
+ ///
+ public string FileName { get; set; } = string.Empty;
+
+ ///
+ /// 文件大小(字节)
+ ///
+ public long FileSize { get; set; }
+}
+
+///
+/// 获取预签名上传URL请求
+///
+public class GetPresignedUrlRequest
+{
+ ///
+ /// 原始文件名
+ ///
+ public string FileName { get; set; } = string.Empty;
+
+ ///
+ /// 文件MIME类型
+ ///
+ public string ContentType { get; set; } = string.Empty;
+
+ ///
+ /// 文件大小(字节)
+ ///
+ public long FileSize { get; set; }
+}
+
+///
+/// 预签名上传URL响应
+///
+public class PresignedUrlResponse
+{
+ ///
+ /// 预签名上传URL
+ ///
+ public string UploadUrl { get; set; } = string.Empty;
+
+ ///
+ /// 文件最终访问URL
+ ///
+ public string FileUrl { get; set; } = string.Empty;
+
+ ///
+ /// 对象Key(COS路径)
+ ///
+ public string ObjectKey { get; set; } = string.Empty;
+
+ ///
+ /// URL过期时间(秒)
+ ///
+ public int ExpiresIn { get; set; }
+
+ ///
+ /// 存储类型 (1=本地, 3=COS)
+ ///
+ public string StorageType { get; set; } = string.Empty;
+}
+
+///
+/// 上传结果(内部使用)
+///
+public class UploadResult
+{
+ ///
+ /// 是否成功
+ ///
+ public bool Success { get; set; }
+
+ ///
+ /// 文件URL
+ ///
+ public string? Url { get; set; }
+
+ ///
+ /// 错误信息
+ ///
+ public string? ErrorMessage { get; set; }
+
+ ///
+ /// 创建成功结果
+ ///
+ public static UploadResult Ok(string url)
+ {
+ return new UploadResult
+ {
+ Success = true,
+ Url = url
+ };
+ }
+
+ ///
+ /// 创建失败结果
+ ///
+ public static UploadResult Fail(string errorMessage)
+ {
+ return new UploadResult
+ {
+ Success = false,
+ ErrorMessage = errorMessage
+ };
+ }
+}