WorkCamera/server/Zr.Admin.NET/ZR.Admin.WebApi/Controllers/CosController.cs
2026-01-05 21:20:55 +08:00

119 lines
3.7 KiB
C#

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
{
/// <summary>
/// 腾讯云COS接口
/// </summary>
[Route("api/[controller]")]
[ApiExplorerSettings(GroupName = "sys")]
public class CosController : BaseController
{
private readonly NLog.Logger _logger = NLog.LogManager.GetCurrentClassLogger();
/// <summary>
/// 获取上传预签名URL
/// </summary>
/// <param name="request">上传请求参数</param>
/// <returns>预签名URL列表</returns>
/// <remarks>
/// 请求示例:
/// POST /api/cos/getUploadUrls
/// {
/// "recordTime": "2025-01-05T10:00:00",
/// "deptName": "技术部",
/// "content": "设备检修",
/// "workers": ["张三", "李四"],
/// "fileExt": ".jpg",
/// "imageCount": 3
/// }
/// </remarks>
[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);
}
}
/// <summary>
/// 获取临时密钥
/// </summary>
/// <returns>临时密钥信息</returns>
/// <remarks>
/// 用于CS客户端迁移历史数据时直接上传到COS
/// </remarks>
[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);
}
}
}
}