diff --git a/ruoyi-modules/ruoyi-content/pom.xml b/ruoyi-modules/ruoyi-content/pom.xml
index 2f9d045f4..dbd6f002e 100644
--- a/ruoyi-modules/ruoyi-content/pom.xml
+++ b/ruoyi-modules/ruoyi-content/pom.xml
@@ -29,7 +29,11 @@
minio
8.2.1
-
+
+ com.squareup.okhttp3
+ okhttp
+ 3.14.9
+
com.tencentcloudapi
@@ -158,6 +162,26 @@
spring-rabbit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java
new file mode 100644
index 000000000..7cba65770
--- /dev/null
+++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java
@@ -0,0 +1,201 @@
+package com.wzj.soopin.content.controller.admin;
+
+import com.tencentcloudapi.vod.v20180717.models.*;
+import com.wzj.soopin.content.result.GraceJSONResult;
+import com.wzj.soopin.content.service.VlogUploadService;
+import com.wzj.soopin.content.utils.TencentCloudUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+
+@Slf4j
+@Api(tags = "管理端-视频上传接口")
+@RequestMapping("admin/vlog/upload")
+@RestController
+public class VlogUploadController {
+
+ @Autowired
+ private VlogUploadService vlogUploadService;
+
+ @Autowired
+ private TencentCloudUtil tencentCloudUtil;
+
+ @ApiOperation("获取腾讯云点播视频列表")
+ @GetMapping("/list")
+ public GraceJSONResult getVodList(
+ @ApiParam(value = "页码", defaultValue = "1") @RequestParam(required = false, defaultValue = "1") Integer pageNum,
+ @ApiParam(value = "每页记录数", defaultValue = "20") @RequestParam(required = false, defaultValue = "20") Integer pageSize,
+ @ApiParam(value = "文件状态,可选值:Normal(正常)、SystemForbidden(平台封禁)、Forbidden(主动封禁)") @RequestParam(required = false) String[] status,
+ @ApiParam(value = "文件类型,可选值:Video(视频)、Audio(音频)、Image(图片)") @RequestParam(required = false) String[] categories,
+ @ApiParam(value = "媒体文件来源,可选值:Upload(上传)、Record(直播录制)等") @RequestParam(required = false) String[] sourceTypes,
+ @ApiParam(value = "媒体文件封装格式,如:mp4、mov等") @RequestParam(required = false) String[] mediaTypes,
+ @ApiParam(value = "文件名,支持模糊搜索") @RequestParam(required = false) String[] names,
+ @ApiParam(value = "文件名前缀") @RequestParam(required = false) String[] namePrefixes,
+ @ApiParam(value = "文件描述,支持模糊搜索") @RequestParam(required = false) String[] descriptions,
+ @ApiParam(value = "标签") @RequestParam(required = false) String[] tags,
+ @ApiParam(value = "分类ID") @RequestParam(required = false) Long[] classIds,
+ @ApiParam(value = "存储地区,如:ap-guangzhou") @RequestParam(required = false) String[] storageRegions,
+ @ApiParam(value = "创建时间范围-开始时间,格式:yyyy-MM-dd'T'HH:mm:ss'Z'") @RequestParam(required = false) String createTimeAfter,
+ @ApiParam(value = "创建时间范围-结束时间,格式:yyyy-MM-dd'T'HH:mm:ss'Z'") @RequestParam(required = false) String createTimeBefore,
+ @ApiParam(value = "排序字段,目前仅支持:CreateTime") @RequestParam(required = false, defaultValue = "CreateTime") String sortField,
+ @ApiParam(value = "排序方式,可选值:Desc(降序)、Asc(升序)") @RequestParam(required = false, defaultValue = "Desc") String sortOrder,
+ @ApiParam(value = "需要返回的信息类型,可选值:basicInfo(基础信息)、metaData(元信息)、transcodeInfo(转码信息)等") @RequestParam(required = false) String[] filters) {
+ try {
+ // 验证密钥配置
+ String secretId = tencentCloudUtil.getSecretId();
+ String secretKey = tencentCloudUtil.getSecretKey();
+ if (secretId == null || secretId.isEmpty() || secretKey == null || secretKey.isEmpty()) {
+ log.error("腾讯云密钥未配置");
+ return GraceJSONResult.errorMsg("腾讯云密钥未配置");
+ }
+
+ // 创建请求对象
+ SearchMediaRequest req = new SearchMediaRequest();
+
+ // 设置分页参数
+ req.setOffset((long) ((pageNum - 1) * pageSize));
+ req.setLimit((long) pageSize);
+
+ // 设置排序
+ SortBy sort = new SortBy();
+ sort.setField(sortField);
+ sort.setOrder(sortOrder);
+ req.setSort(sort);
+
+ // 设置过滤条件
+ if (categories != null && categories.length > 0) {
+ req.setCategories(categories);
+ }
+ if (sourceTypes != null && sourceTypes.length > 0) {
+ req.setSourceTypes(sourceTypes);
+ }
+// if (mediaTypes != null && mediaTypes.length > 0) {
+// req.setMediaTypes(mediaTypes);
+// }
+ if (names != null && names.length > 0) {
+ req.setNames(names);
+ }
+ if (namePrefixes != null && namePrefixes.length > 0) {
+ req.setNamePrefixes(namePrefixes);
+ }
+ if (descriptions != null && descriptions.length > 0) {
+ req.setDescriptions(descriptions);
+ }
+ if (tags != null && tags.length > 0) {
+ req.setTags(tags);
+ }
+ if (classIds != null && classIds.length > 0) {
+ req.setClassIds(classIds);
+ }
+ if (storageRegions != null && storageRegions.length > 0) {
+ req.setStorageRegions(storageRegions);
+ }
+// if (createTimeAfter != null && !createTimeAfter.isEmpty()) {
+// req.setCreateTimeAfter(createTimeAfter);
+// }
+// if (createTimeBefore != null && !createTimeBefore.isEmpty()) {
+// req.setCreateTimeBefore(createTimeBefore);
+// }
+ if (filters != null && filters.length > 0) {
+ req.setFilters(filters);
+ }
+
+ // 调用腾讯云API获取视频列表
+ log.info("开始调用腾讯云 SearchMedia API");
+ SearchMediaResponse resp = vlogUploadService.searchMedia(req);
+ log.info("腾讯云 SearchMedia API 调用成功");
+
+ // 处理响应结果
+ Map result = new HashMap<>();
+ result.put("totalCount", resp.getTotalCount());
+ result.put("pageNum", pageNum);
+ result.put("pageSize", pageSize);
+
+ List