Browse Source

1.密钥加盐
2.上传视频阻塞问题解决

S0025136190 1 year ago
parent
commit
d423eb5ffa

+ 27 - 1
Backend/sample/pom.xml

@@ -168,7 +168,33 @@
             <version>1.5.9</version>
         </dependency>
 
-
+        <dependency>
+            <groupId>org.bytedeco</groupId>
+            <artifactId>javacpp</artifactId>
+            <version>1.5.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.bytedeco</groupId>
+            <artifactId>opencv</artifactId>
+            <version>4.7.0-1.5.9</version>
+            <!--本机和Linux不同环境配置不一样 -->
+            <!--<classifier>windows-x86_64</classifier>-->
+            <classifier>linux-x86_64</classifier>
+        </dependency>
+        <dependency>
+            <groupId>org.bytedeco</groupId>
+            <artifactId>openblas</artifactId>
+            <version>0.3.23-1.5.9</version>
+            <!--<classifier>windows-x86_64</classifier>-->
+           <classifier>linux-x86_64</classifier>
+        </dependency>
+        <dependency>
+            <groupId>org.bytedeco</groupId>
+            <artifactId>ffmpeg</artifactId>
+            <version>6.0-1.5.9</version>
+            <!--<classifier>windows-x86_64</classifier>-->
+           <classifier>linux-x86_64</classifier>
+        </dependency>
 
     </dependencies>
 

+ 38 - 19
Backend/sample/src/main/java/com/dji/sample/common/util/DesUtil.java

@@ -1,23 +1,23 @@
 package com.dji.sample.common.util;
 
 import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.RandomUtil;
 import cn.hutool.crypto.SecureUtil;
 import cn.hutool.crypto.symmetric.DES;
 import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
 
-import java.util.UUID;
+import java.nio.charset.StandardCharsets;
 
 /**
  * @description:对称加密
  */
 public class DesUtil {
 
-    private static final String KEY = "jPQQqFT3lwg=";
 
-    /**
-     * 根据KEY生成DES
-     */
-    private static final DES DES = SecureUtil.des(SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue(), KEY.getBytes()).getEncoded());
+    private static DES getDes(String salt) {
+        String key = genKey(salt);
+        return SecureUtil.des(SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue(), key.getBytes()).getEncoded());
+    }
 
     /**
      * 获取加密后信息
@@ -25,8 +25,9 @@ public class DesUtil {
      * @param plainText 明文
      * @return 加密后信息
      */
-    public static String getEncryptData(String plainText) {
-        return DES.encryptHex(plainText); // 加密为16进制
+    public static String getEncryptData(String plainText,String salt) {
+
+        return getDes(salt).encryptHex(plainText); // 加密为16进制
     }
 
     /**
@@ -35,8 +36,8 @@ public class DesUtil {
      * @param cipherText 密文
      * @return 解密后信息
      */
-    public static String getDecryptData(String cipherText) {
-        return DES.decryptStr(cipherText);
+    public static String getDecryptData(String cipherText,String salt) {
+        return getDes(salt).decryptStr(cipherText);
     }
 
     /**
@@ -49,19 +50,37 @@ public class DesUtil {
         return Base64.encode(key);
     }
 
+    public static String genKey(String salt) {
+        System.out.println(salt);
+        String key = "b1uruk98vuk40cdego6jw5yv9tygjm3s";//CustomConfiguration.key;
+        byte[] sKey = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue(),(salt + key).getBytes(StandardCharsets.UTF_8)).getEncoded();
+        return Base64.encode(sKey);
+    }
+
+    public static String genSalt() {
+        return RandomUtil.randomString(2);
+    }
+
     public static void main(String[] args) {
-        String encodeData = DesUtil.getEncryptData("WosIsAC58v");
-        System.out.println(encodeData);
-        encodeData = getEncryptData("123456");
+        String salt = genSalt();
+        System.out.println(salt);
+        String encodeData = DesUtil.getEncryptData("Zyuas@202406",salt);
         System.out.println(encodeData);
-        encodeData = getEncryptData("test123456");
-        System.out.println(encodeData);
-        encodeData = getEncryptData("test12345678");
+//        encodeData = DesUtil.getEncryptData("WosIsAC58v",salt);
+//        System.out.println(encodeData);
+//        encodeData = DesUtil.getEncryptData("pilot123",salt);
+//        System.out.println(encodeData);
+
+        encodeData = getEncryptData("123456",salt);
         System.out.println(encodeData);
-        String decodeData = getDecryptData("017d8a1661714a61fefb8093f6cee7c5");
+//        encodeData = getEncryptData("test123456");
+//        System.out.println(encodeData);
+//        encodeData = getEncryptData("test12345678");
+//        System.out.println(encodeData);
+        String decodeData = getDecryptData(encodeData,salt);
         System.out.println(decodeData);
-        System.out.println(UUID.randomUUID().toString());
-        System.out.println(UUID.randomUUID().toString());
+//        System.out.println(UUID.randomUUID().toString());
+//        System.out.println(UUID.randomUUID().toString());
 
     }
 }

+ 19 - 0
Backend/sample/src/main/java/com/dji/sample/common/util/PicExifUtil.java

@@ -24,6 +24,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext
 import org.springframework.stereotype.Component;
 
 import java.io.File;
+import java.io.IOException;
 import java.io.InputStream;
 import java.text.DecimalFormat;
 
@@ -41,8 +42,18 @@ public class PicExifUtil {
     public static final String JPG = ".JPG";
 
     public static MediaExifDTO getPicExif(String objectKey) {
+        long sTime = System.currentTimeMillis();
+        if (objectKey.endsWith(MP4)) {
+            log.info("======获取MP4文件" + objectKey + "开始时间:" + sTime);
+        }
         OssServiceContext ossService = SpringBeanUtilsTest.getBean(OssServiceContext.class);
         InputStream inputStream = ossService.getObject(OssConfiguration.bucket, objectKey);
+
+        long eTime = System.currentTimeMillis();
+        if (objectKey.endsWith(MP4)) {
+            log.info("======获取MP4文件" + objectKey + "结束时间:" + sTime + ",耗时:" + (eTime - sTime));
+        }
+
         return getPicExif(inputStream,objectKey.endsWith(MP4));
     }
 
@@ -88,6 +99,14 @@ public class PicExifUtil {
             return builder.build();
         } catch (Exception e) {
             e.printStackTrace();
+        } finally {
+            if(inputStream != null) {
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
         }
         return null;
     }

+ 43 - 12
Backend/sample/src/main/java/com/dji/sample/common/util/ThumbnailatorUtil.java

@@ -10,10 +10,13 @@ import org.bytedeco.javacv.Frame;
 import org.bytedeco.javacv.Java2DFrameConverter;
 import org.springframework.stereotype.Component;
 
+import javax.imageio.ImageIO;
 import java.awt.*;
 import java.awt.image.BufferedImage;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
 
 /**
  * @author hqjiang
@@ -27,19 +30,35 @@ public class ThumbnailatorUtil {
 
     private static final String MP4 = ".MP4";
 
-    public static BufferedImage getThumbnail(String objectKey, int width, int height) {
+//    public static BufferedImage getThumbnail(String objectKey, int width, int height) {
+//        try {
+//            OssServiceContext ossService = SpringBeanUtilsTest.getBean(OssServiceContext.class);
+//            InputStream inputStream = ossService.getObject(OssConfiguration.bucket, objectKey);
+//            if(!objectKey.endsWith(MP4)) {
+//                return Thumbnails.of(inputStream)
+//                        .size(width, height)
+//                        .outputQuality(0.75f)
+//                        .outputFormat("JPEG")
+//                        .asBufferedImage();
+//            } else {
+//                return getVedioImg(inputStream,objectKey,width,height);
+//            }
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//        return null;
+//    }
+
+    public static BufferedImage getThumbnail(String objectKey, URL url,int width, int height) {
         try {
             if(!objectKey.endsWith(MP4)) {
-                OssServiceContext ossService = SpringBeanUtilsTest.getBean(OssServiceContext.class);
-                InputStream inputStream = ossService.getObject(OssConfiguration.bucket, objectKey);
-
-                return Thumbnails.of(inputStream)
+                return Thumbnails.of(url)
                         .size(width, height)
                         .outputQuality(0.75f)
                         .outputFormat("JPEG")
                         .asBufferedImage();
             } else {
-                return getVedioImg(objectKey,width,height);
+                return getVedioImg(url,width,height);
             }
         } catch (IOException e) {
             e.printStackTrace();
@@ -55,11 +74,9 @@ public class ThumbnailatorUtil {
      * @param: filePath  文件夹路径
      * @return: void
      */
-    public static BufferedImage getVedioImg(String objectKey, int width, int height) {
+    public static BufferedImage getVedioImg(URL url, int width, int height) {
         try {
-        OssServiceContext ossService = SpringBeanUtilsTest.getBean(OssServiceContext.class);
-        InputStream inputStream = ossService.getObject(OssConfiguration.bucket, objectKey);
-        BufferedImage bImage =  getImage(inputStream, 20);
+        BufferedImage bImage =  getImage(url, 20);
         return Thumbnails.of(bImage)
                 .size(width, height)
                 .outputQuality(0.75f)
@@ -71,10 +88,14 @@ public class ThumbnailatorUtil {
         return null;
     }
 
+    public static void main(String[] args) {
+        getImage(null,10);
+    }
+
 
-    private static BufferedImage getImage(InputStream inputStream, int second) {
+    private static BufferedImage getImage(URL url, int second) {
         try {
-            FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputStream);
+            FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(url);
             grabber.start();
             int ftp = grabber.getLengthInFrames();
             int flag = 0;
@@ -99,8 +120,18 @@ public class ThumbnailatorUtil {
 
             grabber.close();
             grabber.stop();
+            grabber.release();
 
             log.debug("截取视频截图结束:" + System.currentTimeMillis());
+
+            // 保存图片
+//            String outputFolderPath = "D:\\temp\\img"; // 替换为您的输出文件夹路径
+//            File outputFolder = new File(outputFolderPath);
+//            outputFolder.mkdirs();
+//            String outputFilePath = outputFolderPath + File.separator + "frame_" + second + ".jpg";
+//            File outputFile = new File(outputFilePath);
+//            ImageIO.write(bufferedImage, "jpg", outputFile);
+
             return bufferedImage;
         } catch (Exception e) {
             log.error("获取视频图片失败!", e);

+ 10 - 0
Backend/sample/src/main/java/com/dji/sample/configuration/CustomConfiguration.java

@@ -18,9 +18,19 @@ public class CustomConfiguration {
      */
     public static int frequency;
 
+    /**
+     * 加密密钥
+     * @param frequency
+     */
+    public static String key;
+
     public void setFrequency(int frequency) {
         CustomConfiguration.frequency = frequency;
     }
+
+    public void setKey(String key) {
+        CustomConfiguration.key = key;
+    }
 }
 
 

+ 3 - 0
Backend/sample/src/main/java/com/dji/sample/manage/model/entity/UserEntity.java

@@ -47,4 +47,7 @@ public class UserEntity implements Serializable {
 
     @TableField(value = "client_id")
     private String clientId;
+
+    @TableField(value = "salt")
+    private String salt;
 }

+ 6 - 3
Backend/sample/src/main/java/com/dji/sample/manage/service/impl/UserServiceImpl.java

@@ -87,7 +87,7 @@ public class UserServiceImpl implements IUserService {
         }
 
         //密码加密
-        password = DesUtil.getEncryptData(password);
+        password = DesUtil.getEncryptData(password,userEntity.getSalt());
 
         if (!password.equals(userEntity.getPassword())) {
             return new HttpResultResponse()
@@ -142,7 +142,7 @@ public class UserServiceImpl implements IUserService {
         }
 
         //密码加密
-        String encryptPsw = DesUtil.getEncryptData(password);
+        String encryptPsw = DesUtil.getEncryptData(password,userEntity.getSalt());
         if (!encryptPsw.equals(userEntity.getPassword()) || !username.equals(userEntity.getUsername())) {
             return new HttpResultResponse()
                     .setCode(HttpStatus.UNAUTHORIZED.value())
@@ -225,7 +225,8 @@ public class UserServiceImpl implements IUserService {
                     .setMessage("密码不能为空");
         }
         //密码加密
-        String encryptPsw = DesUtil.getEncryptData(password);
+        String salt = DesUtil.genSalt();
+        String encryptPsw = DesUtil.getEncryptData(password,salt);
 
         long curTime = System.currentTimeMillis();
         userEntity = UserEntity.builder().
@@ -236,6 +237,7 @@ public class UserServiceImpl implements IUserService {
                 .createTime(curTime)
                 .updateTime(curTime)
                 .clientId(clientId)
+                .salt(salt)
                 .build();
         UserEntity apiUser = getApiUser(clientId);
         if(apiUser == null) {
@@ -244,6 +246,7 @@ public class UserServiceImpl implements IUserService {
         } else {
             userEntity.setUsername(username);
             userEntity.setPassword(encryptPsw);
+            userEntity.setSalt(salt);
             userEntity.setUpdateTime(System.currentTimeMillis());
             int cnt = mapper.update(userEntity, new LambdaUpdateWrapper<UserEntity>()
                     .eq(UserEntity::getClientId, clientId)

+ 1 - 1
Backend/sample/src/main/java/com/dji/sample/media/controller/MediaController.java

@@ -47,7 +47,7 @@ public class MediaController implements IHttpMediaService {
      */
     @Override
     public HttpResultResponse<String> mediaUploadCallback(String workspaceId, @Valid MediaUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) {
-        log.info("==============mediaUploadCallback====================workspaceId:" + workspaceId);
+        log.info("==============mediaUploadCallback====================workspaceId:" + workspaceId + ",request:" + request.toString());
         mediaService.saveMediaFile(workspaceId, request);
         return HttpResultResponse.success(request.getObjectKey());
     }

+ 99 - 54
Backend/sample/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java

@@ -1,13 +1,11 @@
 package com.dji.sample.media.service.impl;
 
+import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.ZipUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.dji.sample.common.util.CoordinateUtil;
-import com.dji.sample.common.util.PicExifUtil;
-import com.dji.sample.common.util.ThumbnailatorUtil;
-import com.dji.sample.common.util.UserRequest;
+import com.dji.sample.common.util.*;
 import com.dji.sample.component.oss.model.OssConfiguration;
 import com.dji.sample.component.oss.service.impl.OssServiceContext;
 import com.dji.sample.manage.model.dto.DeviceDictionaryDTO;
@@ -49,6 +47,7 @@ import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
+import java.util.concurrent.Executor;
 import java.util.stream.Collectors;
 
 /**
@@ -85,6 +84,9 @@ public class FileServiceImpl implements IFileService {
     @Autowired
     private  IGroupService groupService;
 
+    @Autowired
+    private Executor threadPool;
+
     private static final String IMAGE = "image";
     private static final String VIDEO = "video";
     private static final String TAIL = "_100x100";
@@ -168,13 +170,61 @@ public class FileServiceImpl implements IFileService {
 
     @Override
     public Integer saveFile(String workspaceId, MediaUploadCallbackRequest file) {
+        //保存基本信息
         MediaFileEntity fileEntity = this.fileUploadConvertToEntity(workspaceId,file);
         fileEntity.setWorkspaceId(workspaceId);
         fileEntity.setFileId(UUID.randomUUID().toString());
         int result = mapper.insert(fileEntity);
+        //更新exif信息
+        updateExifInfo(fileEntity,workspaceId,file);
         return result;
     }
 
+    private void updateExifInfo(MediaFileEntity fileEntity, String workspaceId, MediaUploadCallbackRequest file) {
+        //生成缩略图
+        threadPool.execute(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    String objectKey = file.getObjectKey();
+
+                    //生成缩略图
+                    String tObjectKey = getThumbnailObjectKey(file.getName());
+                    putThumbnailImage(tObjectKey, objectKey, true);
+
+                    //获取图片信息
+                    MediaExifDTO exif = PicExifUtil.getPicExif(objectKey);
+
+                    if (file != null) {
+                        fileEntity.setImageWidth(exif.getImageWidth());
+                        fileEntity.setImageHeight(exif.getImageHeight());
+                        fileEntity.setXResolution(exif.getXResolution());
+                        fileEntity.setYResolution(exif.getYResolution());
+                        fileEntity.setLatitude(BigDecimal.valueOf(CoordinateUtil.checkValidVal(exif.getLatitude())).setScale(14, RoundingMode.DOWN));
+                        fileEntity.setLongitude(BigDecimal.valueOf(CoordinateUtil.checkValidVal(exif.getLongitude())).setScale(14, RoundingMode.DOWN));
+                        fileEntity.setLongitudeRef(exif.getLongitudeRef());
+                        fileEntity.setLatitudeRef(exif.getLatitudeRef());
+                        fileEntity.setMediaType(exif.getPictureType());
+                        fileEntity.setPictureType(exif.getPictureType());
+                        fileEntity.setDurationSeconds(exif.getDurationSeconds());
+
+                        mapper.update(fileEntity,
+                                new LambdaUpdateWrapper<MediaFileEntity>().eq(MediaFileEntity::getFileId, fileEntity.getFileId()));
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+
+                }
+            }
+        });
+    }
+
+    private InputStream copyInputStream(InputStream input) {
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+        IoUtil.copy(input,output);
+        return new ByteArrayInputStream(output.toByteArray());
+    }
+
     @Override
     public List<MediaFileDTO> getAllFilesByWorkspaceId(String workspaceId) {
         return mapper.selectList(new LambdaQueryWrapper<MediaFileEntity>()
@@ -293,7 +343,8 @@ public class FileServiceImpl implements IFileService {
     private MediaFileEntity fileUploadConvertToEntity(String workspaceId, MediaUploadCallbackRequest file) {
         //通过path 获取航线名称,文件夹名称
         String waylineName = getWaylineName(file.getPath());
-        String dirName = getDirName(waylineName, file.getPath());
+//        String dirName = getDirName(waylineName, file.getPath());
+        String dirName = file.getPath();
         MediaDirDTO dirDto = null;
         synchronized(dirName.intern()) {
             dirDto = mediaDirService.getMediaDirByName(workspaceId, dirName, null);
@@ -313,51 +364,48 @@ public class FileServiceImpl implements IFileService {
                 }
                 dirDto = mediaDirService.createDir(dirBuilder.build());
             }
-        }
-        //生成缩略图
-        String tObjectKey = getThumbnailObjectKey(file.getName());
-        putThumbnailImage(tObjectKey,file.getObjectKey(),true);
 
-        MediaFileEntity.MediaFileEntityBuilder builder = MediaFileEntity.builder();
 
-        if (file != null) {
-            //获取图片信息
-            MediaExifDTO exif = PicExifUtil.getPicExif(file.getObjectKey());
-
-            //经纬度转换
-            //AMap aMap = CoordinateUtil.transform(file.getMetadata().getShootPosition().getLng(),file.getMetadata().getShootPosition().getLat());
-            //AMap aMap = CoordinateUtil.transform(exif.getLongitude(),exif.getLatitude());
-            builder.fileName(file.getName())
-                    .filePath(file.getPath())
-                    .fingerprint(file.getFingerprint())
-                    .objectKey(file.getObjectKey())
-                    .subFileType(Optional.ofNullable(file.getSubFileType()).map(MediaSubFileTypeEnum::getType).orElse(null))
-                    .isOriginal(file.getExt().getOriginal())
-                    .jobId(file.getExt().getFileGroupId())
-                    .drone(file.getExt().getSn())
-                    .tinnyFingerprint(file.getExt().getTinnyFingerprint())
-                    .payload(getDeviceNameByModelKey(file.getExt().getPayloadModelKey()))
-                    .dirId(dirDto.getId())
-                    .waylineName(waylineName)
-                    .imageWidth(exif.getImageWidth())
-                    .imageHeight(exif.getImageHeight())
-                    .xResolution(exif.getXResolution())
-                    .yResolution(exif.getYResolution())
-                    .latitude(BigDecimal.valueOf(CoordinateUtil.checkValidVal(exif.getLatitude())).setScale(14, RoundingMode.DOWN))
-                    .longitude( BigDecimal.valueOf(CoordinateUtil.checkValidVal(exif.getLongitude())).setScale(14, RoundingMode.DOWN))
-                    .absoluteAltitude(BigDecimal.valueOf(CoordinateUtil.checkValidVal(file.getMetadata().getAbsoluteAltitude())).setScale(6, RoundingMode.DOWN))
-                    .relativeAltitude(BigDecimal.valueOf(CoordinateUtil.checkValidVal(file.getMetadata().getRelativeAltitude())).setScale(6, RoundingMode.DOWN))
-                    .size(ossService.getObjectSize(OssConfiguration.bucket, file.getObjectKey()))
-                    .pictureTime(file.getMetadata().getCreatedTime() != null ? file.getMetadata().getCreatedTime().atZone(ZoneId.of("UTC+0")).toInstant().toEpochMilli() : null)
-                    .longitudeRef(exif.getLongitudeRef())
-                    .latitudeRef(exif.getLatitudeRef())
-                    .mediaType(exif.getPictureType())
-                    .pictureType(exif.getPictureType())
-                    .durationSeconds(exif.getDurationSeconds())
-                    .taskName(dirDto.getDirName())//先取远程计划任务名称,没有就取文件夹名称
-            ;
+            MediaFileEntity.MediaFileEntityBuilder builder = MediaFileEntity.builder();
+
+            if (file != null) {
+
+
+                //经纬度转换
+                //AMap aMap = CoordinateUtil.transform(file.getMetadata().getShootPosition().getLng(),file.getMetadata().getShootPosition().getLat());
+                //AMap aMap = CoordinateUtil.transform(exif.getLongitude(),exif.getLatitude());
+                builder.fileName(file.getName())
+                        .filePath(file.getPath())
+                        .fingerprint(file.getFingerprint())
+                        .objectKey(file.getObjectKey())
+                        .subFileType(Optional.ofNullable(file.getSubFileType()).map(MediaSubFileTypeEnum::getType).orElse(null))
+                        .isOriginal(file.getExt().getOriginal())
+                        .jobId(file.getExt().getFileGroupId())
+                        .drone(file.getExt().getSn())
+                        .tinnyFingerprint(file.getExt().getTinnyFingerprint())
+                        .payload(getDeviceNameByModelKey(file.getExt().getPayloadModelKey()))
+                        .dirId(dirDto.getId())
+                        .waylineName(waylineName)
+//                        .imageWidth(exif.getImageWidth())
+//                        .imageHeight(exif.getImageHeight())
+//                        .xResolution(exif.getXResolution())
+//                        .yResolution(exif.getYResolution())
+//                        .latitude(BigDecimal.valueOf(CoordinateUtil.checkValidVal(exif.getLatitude())).setScale(14, RoundingMode.DOWN))
+//                        .longitude(BigDecimal.valueOf(CoordinateUtil.checkValidVal(exif.getLongitude())).setScale(14, RoundingMode.DOWN))
+                        .absoluteAltitude(BigDecimal.valueOf(CoordinateUtil.checkValidVal(file.getMetadata().getAbsoluteAltitude())).setScale(6, RoundingMode.DOWN))
+                        .relativeAltitude(BigDecimal.valueOf(CoordinateUtil.checkValidVal(file.getMetadata().getRelativeAltitude())).setScale(6, RoundingMode.DOWN))
+                        .size(ossService.getObjectSize(OssConfiguration.bucket, file.getObjectKey()))
+                        .pictureTime(file.getMetadata().getCreatedTime() != null ? file.getMetadata().getCreatedTime().atZone(ZoneId.of("UTC+0")).toInstant().toEpochMilli() : null)
+//                        .longitudeRef(exif.getLongitudeRef())
+//                        .latitudeRef(exif.getLatitudeRef())
+//                        .mediaType(exif.getPictureType())
+//                        .pictureType(exif.getPictureType())
+//                        .durationSeconds(exif.getDurationSeconds())
+                        .taskName(dirDto.getDirName())//先取远程计划任务名称,没有就取文件夹名称
+                ;
+            }
+            return builder.build();
         }
-        return builder.build();
     }
 
     private String getDeviceNameByModelKey(DeviceEnum modelKey) {
@@ -459,21 +507,17 @@ public class FileServiceImpl implements IFileService {
         String originFileName = entity.getFileName();
         //缩略图路径
         String tObjectKey = getThumbnailObjectKey(originFileName);
-//        if(!putThumbnailImage(tObjectKey,entity.getObjectKey(),false)) {
-//            return null;
-//        }
         return ossService.getObjectUrl(OssConfiguration.bucket, tObjectKey).toString();
 
     }
 
     private boolean putThumbnailImage(String tObjectKey, String originObjectKey,boolean toCreate) {
-        if(originObjectKey.endsWith(PicExifUtil.MP4)) {
-            System.out.println(originObjectKey);
-        }
         //生成缩略图
         if(!ossService.objectExists(OssConfiguration.bucket,tObjectKey)) {
             if(toCreate) {
-                BufferedImage bufferedImage = ThumbnailatorUtil.getThumbnail(originObjectKey, 100, 100);
+                System.out.println("======生成缩略图开始======:" + originObjectKey);
+                URL url = ossService.getObjectUrl(OssConfiguration.bucket, originObjectKey);
+                BufferedImage bufferedImage = ThumbnailatorUtil.getThumbnail(originObjectKey, url,100, 100);
                 if (bufferedImage != null) {
                     ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                     try {
@@ -483,6 +527,7 @@ public class FileServiceImpl implements IFileService {
                     }
                     ossService.putObject(OssConfiguration.bucket, tObjectKey, new ByteArrayInputStream(outputStream.toByteArray()));
                 }
+                System.out.println("======生成缩略图结束======:" + originObjectKey);
             } else {
                 return false;
             }

+ 2 - 1
Backend/sample/src/main/resources/application.yml

@@ -180,4 +180,5 @@ livestream:
 #自定义配置
 custom-config:
   #航点采集频次(秒)
-  frequency: 3
+  frequency: 3
+  key: b1uruk98vuk40cdego6jw5yv9tygjm3s