From daf7acb4f107a427e4a83ba1eb26e5e6012cbdaf Mon Sep 17 00:00:00 2001
From: kongzy <kongzy>
Date: 星期三, 26 六月 2024 17:04:52 +0800
Subject: [PATCH] update

---
 exam-system/src/main/java/com/gkhy/exam/system/service/impl/SysCommonServiceImpl.java |  113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 111 insertions(+), 2 deletions(-)

diff --git a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/SysCommonServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/SysCommonServiceImpl.java
index c09d109..0ccb5d1 100644
--- a/exam-system/src/main/java/com/gkhy/exam/system/service/impl/SysCommonServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/system/service/impl/SysCommonServiceImpl.java
@@ -1,23 +1,45 @@
 package com.gkhy.exam.system.service.impl;
 
 import cn.hutool.core.date.DateUtil;
+import com.gkhy.exam.common.config.FilePathConfig;
 import com.gkhy.exam.common.exception.ApiException;
+import com.gkhy.exam.common.utils.M3u8Utils;
+import com.gkhy.exam.common.utils.MinioUtils;
 import com.gkhy.exam.system.domain.vo.UploadObjectVO;
 import com.gkhy.exam.system.service.SysCommonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 import sun.misc.BASE64Decoder;
 
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.io.*;
-import java.util.Date;
-import java.util.UUID;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.concurrent.CountDownLatch;
 
 @Service
+@Slf4j
 public class SysCommonServiceImpl implements SysCommonService {
 
     @Value("${image.upload_image}")
     private String uploadPath;
+    @Autowired
+    private M3u8Utils m3u8Utils;
+    @Autowired
+    private MinioUtils minioUtils;
+    @Resource
+    private FilePathConfig filePath;
+
+    @Resource(name = "threadPoolTaskExecutor")
+    private ThreadPoolTaskExecutor poolTaskExecutor;
+
+    String projectUrl = System.getProperty("user.dir").replaceAll("\\\\", "/");
 
     @Override
     public UploadObjectVO uploadFile(MultipartFile file) {
@@ -44,6 +66,93 @@
     }
 
     @Override
+    public String uploadVideo2M3u8(MultipartFile file) throws Exception {
+        String path=m3u8Utils.mediaFileToM3u8(file);
+        return upload2M3u8(path);
+    }
+
+
+    /**
+     * 上传转码后得视频至OSS或minIOn
+     * @param path
+     * @return 路径
+     * @throws Exception
+     */
+    public String upload2M3u8(String path) throws Exception {
+        //存储转码后文件
+        String realPath = path.substring(0, path.lastIndexOf("/"));
+        log.info("视频解析后的 realPath {}", realPath);
+        String name = path.substring(path.lastIndexOf("/") + 1);
+        log.info("解析后视频 name {}", name);
+        File allFile = new File(realPath);
+        File[] files = allFile.listFiles();
+        if (null == files || files.length == 0) {
+            return null;
+        }
+        String patch = DateUtil.format(LocalDateTime.now(), "yyyy/MM/") + name.substring(0, name.lastIndexOf(".")) + "/";
+        List<File> errorFile = new ArrayList<>();
+
+        long start = System.currentTimeMillis();
+//        //替换m3u8文件中的路径
+//        FileUtil.replaceTextContent(path, name.substring(0, name.lastIndexOf(".")),
+//                aliOssProperties.getMyHostUrl() + filePath.getProxy() + patch +
+//                        name.substring(0, name.lastIndexOf(".")));
+        //开始上传
+        CountDownLatch countDownLatch = new CountDownLatch(files.length);
+        Arrays.stream(files).forEach(li -> poolTaskExecutor.execute(() -> {
+            try (FileInputStream fileInputStream = new FileInputStream(li)) {
+                minioUtils.fileUploader(patch + li.getName(), fileInputStream);
+
+                log.info("文件:{} 正在上传", li.getName());
+            } catch (Exception e) {
+                errorFile.add(li);
+                e.printStackTrace();
+            } finally {
+                countDownLatch.countDown();
+            }
+        }));
+        countDownLatch.await();
+        long end = System.currentTimeMillis();
+        log.info("解析文件上传成功,共计:{} 个文件,失败:{},共耗时: {}ms", files.length, errorFile.size(), end - start);
+        //  try {
+        //      minioComponent.mkBucket("m3u8");
+        //  } catch (Exception e) {
+        //      log.error("创建Bucket失败!");
+        //  }
+
+        //异步移除所有文件
+        poolTaskExecutor.execute(() -> {
+            deleteFile(projectUrl+filePath.getTempPath());
+        });
+        if (CollectionUtils.isEmpty(errorFile)) {
+            return  filePath.getProxy() + patch + name;
+        }
+        return "";
+    }
+
+    public static void deleteFile(String path){
+        File dest = new File(path);
+        if (dest.isFile() && dest.exists()) {
+            dest.delete();
+        }
+    }
+
+    @Override
+    public boolean uploadSlice(HttpServletRequest request, String guid, Integer chunk, MultipartFile file) {
+        return false;
+    }
+
+    @Override
+    public String uploadVideoMerge(String guid, String fileName) {
+        return null;
+    }
+
+    @Override
+    public String uploadMerge(String guid, String fileName) {
+        return null;
+    }
+
+    @Override
     public UploadObjectVO doUpload(MultipartFile file){
         String originName=file.getOriginalFilename();
         String filename=originName;

--
Gitblit v1.9.2