ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java
@@ -78,7 +78,7 @@ SysUserVo sysUserVo = userMapper.selectUserByUserName(username); SysUserRole userRole = new SysUserRole(); userRole.setUserId(sysUserVo.getUserId()); userRole.setRoleId(Long.valueOf(RoleType.VIDEO.getType())); userRole.setRoleId(Long.valueOf(RoleType.INTERNET.getType())); userRoleMapper.insert(userRole); recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success")); } ruoyi-admin/src/main/resources/application-prod.yml
@@ -105,7 +105,7 @@ spring.data: redis: # 地址 host: 162.14.79.111 host: 123.207.71.245 # 端口,默认为6379 port: 16379 password: 234#Wersdf! ruoyi-admin/src/main/resources/logback-plus.xml
@@ -40,7 +40,7 @@ <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的历史 60天 --> <maxHistory>60</maxHistory> <maxHistory>5</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/VideoRequest.java
New file @@ -0,0 +1,25 @@ package org.dromara.common.oss.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.web.multipart.MultipartFile; @NoArgsConstructor @Data public class VideoRequest { //文件 private MultipartFile file; //文件名称 private String fileName; @Override public String toString() { return "VideoRequest{" + "file=" + file + ", fileName='" + fileName + '\'' + '}'; } } ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java
@@ -61,7 +61,8 @@ .setIdleConnectionTimeout(singleServerConfig.getIdleConnectionTimeout()) .setSubscriptionConnectionPoolSize(singleServerConfig.getSubscriptionConnectionPoolSize()) .setConnectionMinimumIdleSize(singleServerConfig.getConnectionMinimumIdleSize()) .setConnectionPoolSize(singleServerConfig.getConnectionPoolSize()); .setConnectionPoolSize(singleServerConfig.getConnectionPoolSize()) .setSubscriptionsPerConnection(5000); } // 集群配置方式 参考下方注释 RedissonProperties.ClusterServersConfig clusterServersConfig = redissonProperties.getClusterServersConfig(); ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SynchronizationController.java
@@ -3,6 +3,8 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.util.ObjectUtil; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import jakarta.validation.constraints.NotEmpty; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -10,13 +12,21 @@ import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.oss.entity.SynchronousRequest; import org.dromara.common.oss.entity.VideoRequest; import org.dromara.common.redis.utils.QueueUtils; import org.dromara.system.domain.properties.Boundary; import org.dromara.system.domain.vo.SysOssUploadVo; import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysOssService; import org.dromara.system.uitil.HttpUtils; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.text.ParseException; import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; @@ -28,10 +38,11 @@ @RequestMapping("/resource/synchronization") public class SynchronizationController { private final ISysOssService ossService; /** * 上传同步 * 上传同步 视频专网 * @param * @return */ @@ -49,6 +60,24 @@ return R.ok(); } @PostMapping(value = "/uploadTwo") public R uploadTwo(VideoRequest request1) throws IOException { if (ObjectUtil.isNull(request1.getFile())) { return R.fail("上传文件不能为空"); } SysOssVo oss = ossService.upload3(request1); //添加队列数据 QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.DAYS); log.info("通道: {} , 发送数据: {}", "OSS", oss.getOssId()); SysOssUploadVo uploadVo = new SysOssUploadVo(); uploadVo.setUrl(oss.getUrl()); uploadVo.setFileName(oss.getOriginalName()); uploadVo.setOssId(oss.getOssId().toString()); uploadVo.setPassword(oss.getPassword()); return R.ok(uploadVo); } /** * 删除同步 * @@ -56,7 +85,6 @@ */ @PostMapping(value = "/delete") public R<Void> remove(String ossId) throws Exception { ossId = "12312312"; return ossService.deleteWithValidByIds(List.of(convert(ossId)), true,"000000") ? R.ok() : R.fail("提取码错误!"); } @@ -70,4 +98,5 @@ return longArray; } } ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java
@@ -4,11 +4,15 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONArray; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.QueryGroup; import org.dromara.common.oss.entity.SynchronousRequest; import org.dromara.common.oss.entity.VideoRequest; import org.dromara.common.redis.utils.CacheUtils; import org.dromara.common.redis.utils.QueueUtils; import org.dromara.common.web.core.BaseController; @@ -18,6 +22,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.system.domain.SysOss; import org.dromara.system.domain.bo.SysOssBo; import org.dromara.system.domain.properties.Boundary; import org.dromara.system.domain.vo.SysOssUploadVo; import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.mapper.SysOssMapper; @@ -25,6 +30,7 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotEmpty; import lombok.RequiredArgsConstructor; import org.dromara.system.uitil.HttpUtils; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -32,6 +38,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; @@ -48,6 +55,7 @@ @RequestMapping("/resource/oss") public class SysOssController extends BaseController { private final Boundary boundary; private final ISysOssService ossService; private final SysOssMapper ossMapper; /** @@ -72,33 +80,66 @@ return R.ok(list); } // /** // * 上传OSS对象存储 视频专网 // * // * @param file 文件 // */ // @SaCheckPermission("system:oss:upload") // @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) // @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) // public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) throws IOException { // if (ObjectUtil.isNull(file)) { // return R.fail("上传文件不能为空"); // } // SysOssVo oss = ossService.upload(file); // SynchronousRequest request = new SynchronousRequest(); // request.setFile(file); // // // // //添加队列数据 // QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.DAYS); // log.info("通道: {} , 发送数据: {}", "OSS", oss.getOssId()); // SysOssUploadVo uploadVo = new SysOssUploadVo(); // uploadVo.setUrl(oss.getUrl()); // uploadVo.setFileName(oss.getOriginalName()); // uploadVo.setOssId(oss.getOssId().toString()); // uploadVo.setPassword(oss.getPassword()); // return R.ok(uploadVo); // } /** * 上传OSS对象存储 * 上传OSS对象存储 互联网 * * @param file 文件 */ @SaCheckPermission("system:oss:upload") @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) throws IOException { public R<String> upload(@RequestPart("file") MultipartFile file) throws IOException { if (ObjectUtil.isNull(file)) { return R.fail("上传文件不能为空"); } SysOssVo oss = ossService.upload(file); SynchronousRequest request = new SynchronousRequest(); VideoRequest request = new VideoRequest(); request.setFile(file); request.setFileName(file.getOriginalFilename()); String post = post(request); String password = post.substring(post.indexOf("password\":\"") + 9, post.indexOf("\"}")); return R.ok(password); } //添加队列数据 QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 300, TimeUnit.SECONDS); log.info("通道: {} , 发送数据: {}", "OSS", oss.getOssId()); SysOssUploadVo uploadVo = new SysOssUploadVo(); uploadVo.setUrl(oss.getUrl()); uploadVo.setFileName(oss.getOriginalName()); uploadVo.setOssId(oss.getOssId().toString()); uploadVo.setPassword(oss.getPassword()); return R.ok(uploadVo); private String post(VideoRequest request) throws IOException { HashMap<String, String> headers = new HashMap<>(3); String requestUrl = boundary.getChief() + "/resource/synchronization/uploadTwo"; ObjectMapper objectMapper = new ObjectMapper(); objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); headers.put("content-type", "application/json"); // 发送post请求 String resultData = HttpUtils.sendPostRequest2(requestUrl, request); // 并接收返回结果 System.out.println(resultData); return resultData; } /** ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java
@@ -52,18 +52,18 @@ log.info("初始化OSS配置成功"); log.info("通道: {} 监听中......", "OSS"); // 项目初始化设置一次即可 QueueUtils.subscribeBlockingQueue("OSS", (String ossId) -> { // 观察接收时间 log.info("通道: {}, 收到数据: {}", "OSS", ossId); SysOssVo vo = ossMapper.selectVoById(ossId); client.delete( vo.getUrl()); ossMapper.deleteById(Long.valueOf(ossId)); // QueueUtils.subscribeBlockingQueue("OSS", (String ossId) -> { // // 观察接收时间 // log.info("通道: {}, 收到数据: {}", "OSS", ossId); // SysOssVo vo = ossMapper.selectVoById(ossId); // client.delete( vo.getUrl()); // ossMapper.deleteById(Long.valueOf(ossId)); // try { // HttpUtils.sendDeleteRequest(boundary.getLocalhost() + "/resource/synchronization/delete",ossId); // HttpUtils.sendDeleteRequest(boundary.getVideo() + "/resource/synchronization/delete",ossId); // } catch (IOException e) { // throw new RuntimeException(e); // } }); // }); } } ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java
@@ -4,6 +4,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.oss.entity.SynchronousRequest; import org.dromara.common.oss.entity.VideoRequest; import org.dromara.system.domain.bo.SysOssBo; import org.dromara.system.domain.vo.SysOssVo; import jakarta.servlet.http.HttpServletResponse; @@ -30,6 +31,8 @@ SysOssVo upload(MultipartFile file) throws IOException; SysOssVo upload3(VideoRequest request) throws IOException; SysOssVo upload2(SynchronousRequest request) throws ParseException; // SysOssVo upload(File file); ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.github.therapi.runtimejavadoc.repack.com.eclipsesource.json.Json; import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.domain.R; @@ -24,6 +25,7 @@ import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.entity.SynchronousRequest; import org.dromara.common.oss.entity.UploadResult; import org.dromara.common.oss.entity.VideoRequest; import org.dromara.common.oss.enumd.AccessPolicyType; import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.satoken.utils.LoginHelper; @@ -158,6 +160,22 @@ return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult, file); } @Override public SysOssVo upload3(VideoRequest request) throws IOException { String originalfileName = request.getFileName(); String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); OssClient storage = OssFactory.instance(); UploadResult uploadResult; try { uploadResult = storage.uploadSuffix(request.getFile().getBytes(), suffix, request.getFile().getContentType()); } catch (IOException e) { throw new ServiceException(e.getMessage()); } // 保存文件信息 return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult, request.getFile()); } /** * 同步 * @param @@ -166,7 +184,7 @@ */ @Override public SysOssVo upload2(SynchronousRequest request) throws ParseException { String originalfileName = request.getFile().getOriginalFilename(); String originalfileName = request.getFileName(); String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); OssClient storage = OssFactory.instance(); UploadResult uploadResult; @@ -176,8 +194,10 @@ throw new ServiceException(e.getMessage()); } // 保存文件信息 System.out.println("canshu:" + "," + originalfileName +"," + suffix +"," + storage.getConfigKey() +"," + uploadResult + "," +request.getOssId() +"," + request.getPassword() +"," + request.getCreateBy() +"," + request.getFileName() +"," + request.getCreateTime()); return buildResultEntity2(originalfileName, suffix, storage.getConfigKey(), uploadResult,request.getOssId(), request.getPassword(), request.getCreateBy(), request.getFileName(), request.getCreateTime()); request.getPassword(), "1731588854831022081", request.getFileName(), request.getCreateTime()); } // @Override @@ -205,12 +225,12 @@ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); request.setFile(file); request.setFileName(oss.getOriginalName()); request.setPath(uploadResult.getFilename() + "1"); request.setPath(uploadResult.getFilename()); request.setCreateTime(format.format(oss.getCreateTime())); request.setPassword(oss.getPassword()); request.setCreateBy(String.valueOf(oss.getCreateBy())); // request.setOssId(String.valueOf(oss.getOssId())); request.setOssId("12312312"); request.setCreateBy("1731588854831022081"); request.setOssId(String.valueOf(oss.getOssId())); // request.setOssId(); post(request); SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class); @@ -261,7 +281,7 @@ storage.delete(sysOss.getUrl()); if(sysOss.getPassword().equals(password) || password.equals("000000")){ baseMapper.deleteById(sysOss.getOssId()); HttpUtils.sendDeleteRequest(boundary.getLocalhost() + "/resource/synchronization/delete",String.valueOf(sysOss.getOssId())); HttpUtils.sendDeleteRequest(boundary.getVideo() + "/resource/synchronization/delete",String.valueOf(sysOss.getOssId())); return true; } return false; @@ -299,16 +319,16 @@ private String post(SynchronousRequest request) throws IOException { HashMap<String, String> headers = new HashMap<>(3); String requestUrl = boundary.getLocalhost() + "/resource/synchronization/upload"; String requestUrl = boundary.getVideo() + "/resource/synchronization/upload"; ObjectMapper objectMapper = new ObjectMapper(); objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); String jsonString = ""; try { // 将Java对象转换为JSON字符串 // request.setFileName(URLEncoder.encode(request.getFileName(),"utf-8")); jsonString = objectMapper.writeValueAsString(request); System.out.println(jsonString); // System.out.println(jsonString); } catch (Exception e) { e.printStackTrace(); // e.printStackTrace(); } headers.put("content-type", "application/json"); // 发送post请求 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java
@@ -14,6 +14,7 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import org.dromara.common.oss.entity.SynchronousRequest; import org.dromara.common.oss.entity.VideoRequest; import org.springframework.web.multipart.MultipartFile; import java.io.*; @@ -117,7 +118,7 @@ } /** * 上传同步 * 上传同步 视频专网 * @param url * @param entity * @return @@ -152,6 +153,63 @@ } /** * 上传同步 视频专网 * @param url * @param entity * @return * @throws IOException */ public static String sendPostRequest2(String url, VideoRequest entity) throws IOException { org.apache.http.client.HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(url); ContentType contentType = ContentType.create("multipart/form-data", StandardCharsets.UTF_8); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); // 添加MultipartFile参数 builder.addBinaryBody("file", entity.getFile().getBytes(), ContentType.MULTIPART_FORM_DATA, entity.getFile().getOriginalFilename()); // 添加String参数 builder.addTextBody("fileName", entity.getFileName(), contentType); HttpEntity multipart = builder.build(); httpPost.setEntity(multipart); HttpResponse response = httpClient.execute(httpPost); String responseBody = EntityUtils.toString(response.getEntity()); System.out.println("Response: " + responseBody); return responseBody; } /** * 上传同步2 * @param url * @param entity * @return * @throws IOException */ public static String sendPostRequestTwo(String url, SynchronousRequest entity) throws IOException { org.apache.http.client.HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost(url); ContentType contentType = ContentType.create("multipart/form-data", StandardCharsets.UTF_8); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); // 添加MultipartFile参数 builder.addBinaryBody("file", entity.getFile().getBytes(), ContentType.MULTIPART_FORM_DATA, entity.getFile().getOriginalFilename()); HttpEntity multipart = builder.build(); httpPost.setEntity(multipart); HttpResponse response = httpClient.execute(httpPost); String responseBody = EntityUtils.toString(response.getEntity()); System.out.println("Response: " + responseBody); return responseBody; } /** * 删除同步 * @param url // * @param parameter