瀏覽代碼

导览视频转换下载

dengsixing 2 年之前
父節點
當前提交
f440b20f36

+ 11 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/SceneEditController.java

@@ -8,6 +8,7 @@ import com.fdkankan.common.response.ResultData;
 import com.fdkankan.scene.annotation.CheckCooperationPermit;
 import com.fdkankan.scene.service.ISceneEditInfoService;
 import com.fdkankan.scene.service.ISceneEditService;
+import com.fdkankan.scene.service.IScenePlusService;
 import com.fdkankan.scene.service.ISceneProService;
 import com.fdkankan.scene.service.ISceneUploadService;
 import com.fdkankan.scene.service.ISurveillanceService;
@@ -76,6 +77,8 @@ public class SceneEditController extends BaseController {
     private ISceneEditService sceneEditService;
     @Autowired
     private ISurveillanceService surveillanceService;
+    @Autowired
+    private IScenePlusService scenePlusService;
 
 
     /**
@@ -460,6 +463,12 @@ public class SceneEditController extends BaseController {
         return sceneProService.saveRoam(param);
     }
 
+    @CheckCooperationPermit
+    @PostMapping(value = "/downloadRoamVideo")
+    public void tranferRoam(@RequestParam("file") MultipartFile file) throws Exception {
+        sceneUploadService.formatMp4(file, this.response);
+    }
+
     /**
      * 保存热点可见性的数据
      * @return
@@ -1154,4 +1163,6 @@ public class SceneEditController extends BaseController {
 
 
 
+
+
 }

+ 1 - 2
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/IScenePlusService.java

@@ -8,6 +8,7 @@ import java.util.List;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * <p>
@@ -30,6 +31,4 @@ public interface IScenePlusService extends IService<ScenePlus> {
     ResultData moveScene(List<String> numList, Long cameraId, Long userId);
 
 
-
-
 }

+ 5 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneUploadService.java

@@ -5,8 +5,10 @@ import com.fdkankan.common.response.ResultData;
 import com.fdkankan.scene.entity.SceneUpload;
 import com.fdkankan.scene.vo.DeleteFileParamVO;
 import com.fdkankan.scene.vo.UploadContentParamVO;
+import javax.servlet.http.HttpServletResponse;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
 
 /**
@@ -25,4 +27,7 @@ public interface ISceneUploadService extends IService<SceneUpload> {
     ResultData delete(DeleteFileParamVO param) throws Exception;
 
     String uploadContent(UploadContentParamVO param) throws Exception;
+
+    void formatMp4(@RequestParam("file") MultipartFile file, HttpServletResponse response) throws Exception;
+
 }

+ 2 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/ScenePlusServiceImpl.java

@@ -24,6 +24,7 @@ import java.util.Objects;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * <p>
@@ -115,4 +116,5 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         return ResultData.ok();
 
     }
+
 }

+ 52 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneUploadServiceImpl.java

@@ -1,10 +1,12 @@
 package com.fdkankan.scene.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.common.constant.ConstantFilePath;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.constant.TbStatus;
@@ -14,6 +16,7 @@ import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.user.SSOLoginHelper;
 import com.fdkankan.common.user.SSOUser;
 import com.fdkankan.common.util.BASE64DecodedMultipartFile;
+import com.fdkankan.common.util.CreateObjUtil;
 import com.fdkankan.common.util.FileUtil;
 import com.fdkankan.fyun.oss.UploadToOssUtil;
 import com.fdkankan.scene.entity.ScenePro;
@@ -23,11 +26,18 @@ import com.fdkankan.scene.service.ISceneProService;
 import com.fdkankan.scene.service.ISceneUploadService;
 import com.fdkankan.scene.vo.DeleteFileParamVO;
 import com.fdkankan.scene.vo.UploadContentParamVO;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.HashSet;
 import java.util.Set;
+import javax.servlet.http.HttpServletResponse;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -219,4 +229,46 @@ public class SceneUploadServiceImpl extends ServiceImpl<ISceneUploadMapper, Scen
 
         return this.ossUrlPrefix + param.getOssPath();
     }
+
+    @Override
+    public void formatMp4(MultipartFile file, HttpServletResponse response) throws Exception {
+
+        String extName = cn.hutool.core.io.FileUtil.extName(file.getOriginalFilename());
+        File oldFile = File.createTempFile(UUID.randomUUID().toString() ,extName);
+        file.transferTo(oldFile);
+
+        File destFile = File.createTempFile(UUID.randomUUID().toString() ,extName);
+        CreateObjUtil.formatMp4(oldFile.getPath(), destFile.getPath());
+
+        if(cn.hutool.core.io.FileUtil.exist(destFile.getPath())){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5038);
+        }
+
+        File outFile = new File(destFile.getPath());
+        //定义处理流
+        try(
+            InputStream inputStream = new BufferedInputStream(new FileInputStream(outFile));
+            OutputStream outputStream = new BufferedOutputStream(response.getOutputStream())
+        ){
+            response.reset();
+            // 设置在下载框默认显示的文件名
+            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getOriginalFilename(), "UTF-8"));
+            //写明文件大小
+            response.addHeader("Content-Length", "" + outFile.length());
+            // 指明response的返回对象是文件流
+            response.setContentType("application/octet-stream");
+            log.debug("开始读取文件流");
+            //返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞
+            byte[] bytes = new byte[inputStream.available()];
+            //将pdf的内容写入bytes中
+            inputStream.read(bytes);
+            //将bytes中的内容写入
+            outputStream.write(bytes);
+            //刷新输出流,否则不会写出数据
+            outputStream.flush();
+        }finally {
+            FileUtil.delFile(oldFile.getPath());
+            FileUtil.delFile(destFile.getPath());
+        }
+    }
 }