99 lines
3.6 KiB
C#
99 lines
3.6 KiB
C#
|
|
using VideoAnalysisCore.Common;
|
|
using Learn.VideoAnalysis.Controllers.Dto;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using System.Reflection;
|
|
using VideoAnalysisCore.Enum;
|
|
using VideoAnalysisCore.Model;
|
|
using VideoAnalysisCore.AICore.FFMPGE;
|
|
using VideoAnalysisCore.Model.Dto;
|
|
using VideoAnalysisCore.AICore.ChatGPT.Dto;
|
|
|
|
namespace Learn.VideoAnalysis.Controllers
|
|
{
|
|
[ApiController]
|
|
[Route("[controller]/[action]")]
|
|
public class ApiController : ControllerBase
|
|
{
|
|
private readonly ILogger<ApiController> _logger;
|
|
private readonly Repository<VideoTask> videoTaskDB;
|
|
public ApiController(ILogger<ApiController> logger, Repository<VideoTask> videoTaskDB)
|
|
{
|
|
_logger = logger;
|
|
this.videoTaskDB = videoTaskDB;
|
|
}
|
|
|
|
private string GetClientIpAddress()
|
|
{
|
|
// 检查 X-Forwarded-For 请求头
|
|
if (HttpContext.Request.Headers.ContainsKey("X-Forwarded-For")
|
|
&& !string.IsNullOrEmpty(HttpContext.Request.Headers["X-Forwarded-For"]))
|
|
return HttpContext.Request.Headers["X-Forwarded-For"].ToString();
|
|
if (HttpContext.Connection.RemoteIpAddress != null)
|
|
return HttpContext.Connection.RemoteIpAddress.ToString();
|
|
throw new Exception("未能获取到客户端ip地址");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取视频信息<para>taskId/tagId二选一</para>
|
|
/// </summary>
|
|
/// <param name="taskId"></param>
|
|
/// <param name="tagId">自定义id</param>
|
|
/// <returns></returns>
|
|
[HttpGet(Name = "TaskInfo")]
|
|
public async Task<IActionResult> TaskInfo(long taskId,string? tagId)
|
|
{
|
|
var task = await videoTaskDB.AsQueryable()
|
|
.WhereIF(taskId!=0, s => s.Id == taskId)
|
|
.WhereIF(string.IsNullOrEmpty(tagId), s => s.TagId == tagId)
|
|
.FirstAsync();
|
|
if (task.LastEnum != RedisChannelEnum.EndTask)
|
|
return BadRequest(new { Enum = task.LastEnum ,Task = task.ChatAnalysis});
|
|
return Ok(new { Enum = task.LastEnum, Task = task.ChatAnalysis });
|
|
}
|
|
|
|
/// <summary>
|
|
/// 插入队列
|
|
/// </summary>
|
|
/// <param name="enum"></param>
|
|
/// <param name="msg"></param>
|
|
/// <returns></returns>
|
|
[HttpPost(Name = "TestInsertChannel")]
|
|
public IActionResult TestInsertChannel(int @enum=1, string msg= "test_0001")
|
|
{
|
|
RedisExpand.InsertChannel(@enum.ToEnum<RedisChannelEnum>().Value
|
|
, msg);
|
|
return Ok();
|
|
}
|
|
/// <summary>
|
|
/// 视频处理
|
|
/// </summary>
|
|
/// <param name="req">请求体</param>
|
|
/// <returns></returns>
|
|
[HttpPost(Name = "VideoAnalysis")]
|
|
public async Task<IActionResult> VideoAnalysis(VideoAnalysisReq req)
|
|
{
|
|
if (!ModelState.IsValid) return BadRequest(ModelState);
|
|
|
|
// 自动映射属性到哈希
|
|
var task = new VideoTask()
|
|
{
|
|
ComeFrom = GetClientIpAddress(),
|
|
MediaUrl = req.MediaUrl,
|
|
ApiToken = req.ApiToken,
|
|
Tag = req.Tag,
|
|
TagId = req.TagId,
|
|
};
|
|
//入库
|
|
task.Id = await videoTaskDB.InsertReturnBigIdentityAsync(task);
|
|
var hashEntries = task.GetType()
|
|
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
|
|
.ToDictionary(s => s.Name, s => s.GetValue(task));
|
|
RedisExpand.Redis.HMSet(RedisExpandKey.Task(task.Id), hashEntries);
|
|
|
|
RedisExpand.InsertChannel(RedisChannelEnum.DownloadFile,task.Id);
|
|
return Ok(task.Id);
|
|
}
|
|
}
|
|
}
|