zero 7 hónapja
szülő
commit
ad55c78f5f

+ 41 - 1
src/main/java/com/example/fms/common/utils/FileUtils.java

@@ -15,6 +15,7 @@ import org.apache.commons.fileupload.disk.DiskFileItem;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.system.ApplicationHome;
+import org.springframework.http.MediaType;
 import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -491,10 +492,49 @@ public class FileUtils {
 
     public static MultipartFile convertBytesToMultipartFile(byte[] fileData, String fileName) throws IOException {
         InputStream inputStream = new ByteArrayInputStream(fileData);
-        MultipartFile multipartFile = new MockMultipartFile("file", fileName, "application/octet-stream", inputStream);
+        MultipartFile multipartFile = new MockMultipartFile(fileName, fileName, "application/octet-stream", inputStream);
         return multipartFile;
     }
 
+    public static MultipartFile getMultipartFile(byte[] fileData, String fileName) throws IOException {
+        InputStream inputStream = new ByteArrayInputStream(fileData);
+        FileItem fileItem = createFileItem(inputStream, fileName);
+        return new CommonsMultipartFile(fileItem);
+    }
+
+    public static FileItem createFileItem(InputStream inputStream, String fileName) {
+        DiskFileItemFactory factory = new DiskFileItemFactory();
+        FileItem fileItem = factory.createItem("file", MediaType.MULTIPART_FORM_DATA_VALUE, true, fileName);
+        int read = 0;
+        OutputStream os = null;
+        byte[] buffer = new byte[10 * 1024 * 1024];
+        try {
+            os = fileItem.getOutputStream();
+            while ((read = inputStream.read(buffer, 0, 4096)) != -1) {
+                os.write(buffer, 0, read);
+            }
+            inputStream.close();
+        } catch (IOException e) {
+            throw new IllegalArgumentException("Failed to Output");
+        } finally {
+            if (os != null) {
+                try {
+                    os.close();
+                } catch (IOException e) {
+                    throw new IllegalArgumentException("The OutputStream is failed");
+                }
+            }
+            if (inputStream != null) {
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    throw new IllegalArgumentException("The InputStream is failed");
+                }
+            }
+        }
+        return fileItem;
+    }
+
     public static File getFileByBytes(byte[] bytes, String prefix, String suffix) {
         BufferedOutputStream bos = null;
         FileOutputStream fos = null;

+ 22 - 3
src/main/java/com/example/fms/service/FileVersionService.java

@@ -15,8 +15,10 @@ import com.example.fms.common.utils.RandomUtil;
 import com.example.fms.domain.FileOperateRecord;
 import com.example.fms.domain.FileVersion;
 import com.example.fms.domain.Personnel;
+import com.example.fms.domain.SystemFile;
 import com.example.fms.mapper.FileOperateRecordMapper;
 import com.example.fms.mapper.FileVersionMapper;
+import com.example.fms.mapper.SystemFileMapper;
 import com.example.fms.service.permissions.MessageService;
 import com.example.fms.service.permissions.PermissionService;
 import lombok.RequiredArgsConstructor;
@@ -50,7 +52,7 @@ public class FileVersionService {
     private FileVersionMapper fileVersionMapper;
 
     @Autowired
-    private FileOperateRecordMapper fileOperateRecordMapper;
+    private final SystemFileService systemFileService;
 
     /**
      * onlyoffice回调函数(文件保存)
@@ -87,7 +89,6 @@ public class FileVersionService {
                 FileVersion fileVersion = fileVersionMapper.queryFileVersionByGuid(guid);
                 if (ObjectUtils.isEmpty(fileVersion)) {
                     this.addFirstFileVersion(guid, 1, fileName, fileType, user);
-                    previousVersion = "1";
                 }
                 MultipartFile multipartFile = FileUtils.urlToMultipartFile(url, fileName);
                 String replaceFile = fileMangerService.replaceFile(multipartFile, guid, 6);
@@ -139,7 +140,25 @@ public class FileVersionService {
 
     public void addFirstFileVersion(String guid, Integer version, String fileName, String fileType, String user) throws IOException {
         byte[] bytes = fileMangerService.downloadFile(guid);
-        MultipartFile multipartFile = FileUtils.convertBytesToMultipartFile(bytes, fileName);
+        LambdaQueryWrapper<SystemFile> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SystemFile::getGuid, guid);
+        SystemFile systemFile = systemFileService.getOne(queryWrapper, false);
+        MultipartFile multipartFile = null;
+        if (ObjectUtils.isNotEmpty(systemFile)) {
+            String systemFileName = systemFile.getFileName();
+            if (StringUtils.isNotEmpty(systemFileName)) {
+                String str = systemFileName.substring(systemFileName.indexOf("."));
+                multipartFile = FileUtils.getMultipartFile(bytes, fileName + str);
+            } else {
+                multipartFile = FileUtils.getMultipartFile(bytes, fileName + "." + fileType);
+            }
+        }else {
+            if (!fileName.contains(".")) {
+                multipartFile = FileUtils.getMultipartFile(bytes, fileName + "." + fileType);
+            } else {
+                multipartFile = FileUtils.getMultipartFile(bytes, fileName);
+            }
+        }
         List<String> list = fileMangerService.uploadFile(Collections.singletonList(multipartFile), 6);
         FileVersion fileVersion1 = new FileVersion();
         fileVersion1.setFileName(fileName);