Browse Source

机库媒体上传问题修改

S0025136190 1 year ago
parent
commit
50389547fc

+ 1 - 1
Backend/cloud-sdk/src/main/java/com/dji/sdk/cloudapi/wayline/api/AbstractWaylineService.java

@@ -189,7 +189,7 @@ public abstract class AbstractWaylineService {
      */
     @ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_RETURN_HOME_INFO, outputChannel = ChannelName.OUTBOUND_EVENTS)
     @CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0)
-    public TopicRequestsResponse<MqttReply> returnHomeInfo(TopicRequestsRequest<ReturnHomeInfo> request, MessageHeaders headers) {
+    public TopicEventsResponse<MqttReply> returnHomeInfo(TopicEventsRequest<ReturnHomeInfo> request, MessageHeaders headers) {
         throw new UnsupportedOperationException("returnHomeInfo not implemented");
     }
 

+ 20 - 3
Backend/sample/src/main/java/com/dji/sample/common/util/PicExifUtil.java

@@ -4,6 +4,7 @@ package 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.media.model.MediaExifDTO;
+import com.dji.sdk.cloudapi.media.MediaSubFileTypeEnum;
 import com.drew.imaging.ImageMetadataReader;
 import com.drew.imaging.jpeg.JpegMetadataReader;
 import com.drew.imaging.mp4.Mp4MetadataReader;
@@ -12,6 +13,7 @@ import com.drew.metadata.exif.*;
 import com.drew.metadata.file.FileTypeDirectory;
 import com.drew.metadata.mp4.Mp4Directory;
 import com.drew.metadata.mp4.media.Mp4VideoDirectory;
+import com.drew.metadata.xmp.XmpDirectory;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParser;
 import lombok.extern.slf4j.Slf4j;
@@ -24,9 +26,7 @@ import org.springframework.context.ApplicationContext;
 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.io.*;
 import java.text.DecimalFormat;
 
 /**
@@ -41,6 +41,7 @@ public class PicExifUtil {
 
     public static final String MP4 = ".MP4";
     public static final String JPG = ".JPG";
+    public static final String WIDE_CAMERA = "WideCamera";
 
     public static MediaExifDTO getPicExif(String objectKey) {
         long sTime = System.currentTimeMillis();
@@ -77,6 +78,16 @@ public class PicExifUtil {
                 builder.createTime(mp4Directory.getDate(Mp4Directory.TAG_CREATION_TIME).getTime());
 
             } else {
+                //全景图
+                XmpDirectory xmpDirectory = metadata.getFirstDirectoryOfType(XmpDirectory.class);
+                if(xmpDirectory != null) {
+                    String imageSource = xmpDirectory.getXmpProperties().get("drone-dji:ImageSource");
+                    if(WIDE_CAMERA.equals(imageSource)) {
+                        builder.subFileType(MediaSubFileTypeEnum.PANORAMA.getType());
+                    } else {
+                        builder.subFileType(MediaSubFileTypeEnum.NORMAL.getType());
+                    }
+                }
                 //经纬度
                 GpsDirectory gpsDirectory = metadata.getFirstDirectoryOfType(GpsDirectory.class);
                 if(gpsDirectory !=  null) {
@@ -123,4 +134,10 @@ public class PicExifUtil {
         }
         return null;
     }
+
+//    public static void main(String[] args) throws FileNotFoundException {
+//        String filePath = "C:\\Users\\86139\\Desktop\\DJI_20241011173646_0001_V.jpeg";
+//        File file = new File(filePath);
+//        getPicExif(new FileInputStream(file),false);
+//    }
 }

+ 2 - 0
Backend/sample/src/main/java/com/dji/sample/media/model/MediaExifDTO.java

@@ -44,4 +44,6 @@ public class MediaExifDTO {
     private Integer durationSeconds;
 
     private Long createTime;
+
+    private int subFileType;
 }

+ 34 - 23
Backend/sample/src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java

@@ -223,31 +223,42 @@ public class FileServiceImpl implements IFileService {
         fileThreadPool.execute(new Runnable() {
             @Override
             public void run() {
-                try {
-                    //生成缩略图
-                    String tObjectKey = getThumbnailObjectKey(fileName);
-                    putThumbnailImage(tObjectKey, objectKey, true);
+                for(int i = 0; i < 3; i++) {
+                    try {
+                        //生成缩略图
+                        String tObjectKey = getThumbnailObjectKey(fileName);
+                        putThumbnailImage(tObjectKey, objectKey, true);
 
-                    //获取图片信息
-                    MediaExifDTO exif = PicExifUtil.getPicExif(objectKey);
+                        //获取图片信息
+                        MediaExifDTO exif = PicExifUtil.getPicExif(objectKey);
 
-                    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();
+                        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());
+                        fileEntity.setSize(ossService.getObjectSize(OssConfiguration.bucket, objectKey));
+                        if(exif.getSubFileType() == MediaSubFileTypeEnum.PANORAMA.getType()) {
+                            fileEntity.setSubFileType(MediaSubFileTypeEnum.PANORAMA.getType());
+                        }
 
+                        mapper.update(fileEntity,
+                                new LambdaUpdateWrapper<MediaFileEntity>().eq(MediaFileEntity::getFileId, fileEntity.getFileId()));
+                        break;
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        try {
+                            Thread.sleep((i+1) * 10 * 1000);
+                        } catch (InterruptedException ex) {
+                            ex.printStackTrace();
+                        }
+                    }
                 }
             }
         });
@@ -446,7 +457,7 @@ public class FileServiceImpl implements IFileService {
 //                        .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()))
+//                        .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())

+ 3 - 0
Backend/sample/src/main/java/com/dji/sample/media/service/impl/MediaServiceImpl.java

@@ -140,6 +140,8 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
                 return new TopicEventsResponse<MqttReply>().setData(MqttReply.success());
             }
             countDTO.setPreJobId(countDTO.getJobId());
+        } else {
+            return null;
         }
         countDTO.setJobId(jobId);
         mediaRedisService.setMediaHighestPriority(request.getGateway(), countDTO);
@@ -175,6 +177,7 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
         } else {
             file.setSubFileType(MediaSubFileTypeEnum.NORMAL);
         }
+        log.info("================parseMediaFile======path:" + file.getPath() + "=======SubFileType:" + file.getSubFileType());
         // set path
 //        String objectKey = file.getObjectKey();
 //        file.setPath(objectKey.substring(Optional.of(objectKey.indexOf(OssConfiguration.objectDirPrefix))

+ 0 - 6
Backend/sample/src/main/java/com/dji/sample/wayline/service/impl/FlightTaskServiceImpl.java

@@ -617,12 +617,6 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
         return new TopicEventsResponse<>();
     }
 
-    @Override
-    public TopicRequestsResponse<MqttReply> returnHomeInfo(TopicRequestsRequest<ReturnHomeInfo> response, MessageHeaders headers) {
-        log.info("===============FlightTaskServiceImpl returnHomeInfo: {}", response.toString());
-        return new TopicRequestsResponse<>();
-    }
-
     public static void main(String[] args) {
         // 假设 date 是一个 LocalDate 对象,taskPeriod.get(0) 是一个 Long 类型的秒数
         LocalDate date = LocalDate.ofInstant(Instant.ofEpochSecond(1728748800000L), ZoneId.systemDefault());

+ 2 - 2
Backend/sample/src/main/java/com/dji/sample/wayline/service/impl/SDKWaylineService.java

@@ -148,9 +148,9 @@ public class SDKWaylineService extends AbstractWaylineService {
     }
 
     @Override
-    public TopicRequestsResponse<MqttReply> returnHomeInfo(TopicRequestsRequest<ReturnHomeInfo> response, MessageHeaders headers) {
+    public TopicEventsResponse<MqttReply> returnHomeInfo(TopicEventsRequest<ReturnHomeInfo> response, MessageHeaders headers) {
         log.info("returnHomeInfo: {}", response.toString());
-        return new TopicRequestsResponse<>();
+        return new TopicEventsResponse<>();
     }
 
     @Transactional(isolation = Isolation.READ_UNCOMMITTED)