using Infrastructure.Controllers; using Infrastructure.Model; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using ZR.Common; using ZR.Model.Business.Dto; namespace ZR.Admin.WebApi.Controllers { /// /// 腾讯云COS接口 /// [Route("api/[controller]")] [ApiExplorerSettings(GroupName = "sys")] public class CosController : BaseController { private readonly NLog.Logger _logger = NLog.LogManager.GetCurrentClassLogger(); /// /// 获取上传预签名URL /// /// 上传请求参数 /// 预签名URL列表 /// /// 请求示例: /// POST /api/cos/getUploadUrls /// { /// "recordTime": "2025-01-05T10:00:00", /// "deptName": "技术部", /// "content": "设备检修", /// "workers": ["张三", "李四"], /// "fileExt": ".jpg", /// "imageCount": 3 /// } /// [HttpPost("getUploadUrls")] [AllowAnonymous] public IActionResult GetUploadUrls([FromBody] CosUploadUrlsRequest request) { // 参数验证 if (request == null) { return ToResponse(ResultCode.PARAM_ERROR, "请求参数不能为空"); } if (request.ImageCount <= 0) { return ToResponse(ResultCode.PARAM_ERROR, "图片数量必须大于0"); } if (request.ImageCount > 15) { return ToResponse(ResultCode.PARAM_ERROR, "单次最多支持15张图片"); } if (string.IsNullOrWhiteSpace(request.DeptName)) { return ToResponse(ResultCode.PARAM_ERROR, "部门名称不能为空"); } if (string.IsNullOrWhiteSpace(request.Content)) { return ToResponse(ResultCode.PARAM_ERROR, "工作内容不能为空"); } if (request.Workers == null || request.Workers.Count == 0) { return ToResponse(ResultCode.PARAM_ERROR, "参与人员不能为空"); } // 设置默认记录时间 if (request.RecordTime == default) { request.RecordTime = DateTime.Now; } // 设置默认文件扩展名 if (string.IsNullOrWhiteSpace(request.FileExt)) { request.FileExt = ".jpg"; } try { var response = CosService.GetUploadUrls(request); return SUCCESS(response); } catch (Exception ex) { _logger.Error(ex, "获取COS上传URL失败"); return ToResponse(ResultCode.CUSTOM_ERROR, "获取上传URL失败: " + ex.Message); } } /// /// 获取临时密钥 /// /// 临时密钥信息 /// /// 用于CS客户端迁移历史数据时直接上传到COS /// [HttpGet("getTempCredentials")] [AllowAnonymous] public IActionResult GetTempCredentials() { try { var credentials = CosService.GetTempCredentials(); return SUCCESS(credentials); } catch (Exception ex) { _logger.Error(ex, "获取COS临时密钥失败"); return ToResponse(ResultCode.CUSTOM_ERROR, "获取临时密钥失败: " + ex.Message); } } } }