Parcourir la source

Merge remote-tracking branch 'origin/master'

liuyc il y a 2 ans
Parent
commit
4cfcad578e

+ 4 - 0
blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/NewIOSSClient.java

@@ -19,6 +19,7 @@ public interface NewIOSSClient {
     String UPLOAD_FILE_INFO_BYTE = API_PREFIX + "/uploadFileInfoByte";
     String UPLOAD_FILE_INFO_INPUT_STREAM = API_PREFIX + "/uploadFileInfoInputStream";
     String REMOVE_PDF_FILE = API_PREFIX + "/remove-file";
+    String REMOVE_PDF_FILES = API_PREFIX + "/remove-files";
     String UPLOAD_FILE_INFO_WITH_PATH = API_PREFIX + "/uploadFileInfoWithPath";
 
     @PostMapping(value = UPLOAD_FILE_INFO_INPUT_STREAM, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@@ -47,4 +48,7 @@ public interface NewIOSSClient {
 
     @PostMapping(REMOVE_PDF_FILE)
     void removeFile(@RequestParam String fileName);
+
+    @PostMapping(REMOVE_PDF_FILES)
+    void removeFiles(@RequestParam List<String> fileNames);
 }

+ 3 - 1
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/ossre/AliossTemplateRe.java

@@ -214,7 +214,9 @@ public class AliossTemplateRe implements OssTemplateRe {
 
     public void removeFiles(List<String> fileNames) {
         try {
-            fileNames.forEach(this::removeFile);
+            fileNames.forEach((fileName) -> {
+                this.removeFile(fileName);
+            });
         } catch (Throwable var3) {
             throw var3;
         }

+ 25 - 4
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/LargeFileEndpoint.java

@@ -311,7 +311,14 @@ public class LargeFileEndpoint {
 		String filePath =ParamCache.getValue(CommonConstant.SYS_LOCAL_URL)+"largeFile/";
 
 		File tempFile = buildUploadFile(tempFileName);
-		param.getFile().transferTo(tempFile);
+
+		//为了防止win路径有时会抛异常,增加一个处理
+		try {
+			param.getFile().transferTo(tempFile);
+		} catch (Exception e) {
+			writeMultipartFileToFile(param,tempFile);
+		}
+
 
 		/**
 		 * 以上意思是把每个分片都保存成本地一个文件,如 测试.mp4.1 最后合并
@@ -360,9 +367,13 @@ public class LargeFileEndpoint {
 				NewBladeFile newBladeFile = new NewBladeFile();
 				if(param.getFilename().contains("pdf")){
 //					FileInputStream inputStream1 = new FileInputStream(filePath + param.getFilename());
-					PDDocument document = PDDocument.load(multipartFile.getInputStream());
-					//获取文件页数
-					newBladeFile.setPage(document.getPages().getCount());
+					try {
+						PDDocument document = PDDocument.load(multipartFile.getInputStream());
+						//获取文件页数
+						newBladeFile.setPage(document.getPages().getCount());
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
 					//pdf的路径就是文件上传的路径
 					newBladeFile.setPdfUrl(bladeFile.getLink());
 				}else if(param.getFilename().contains("xlsx") || param.getFilename().contains("xls")){
@@ -398,6 +409,16 @@ public class LargeFileEndpoint {
 		return result;
 	}
 
+	public void writeMultipartFileToFile(MultipartFileParam param, File tempFile) throws IOException {
+		byte[] data = param.getFile().getBytes(); // 获取二进制数据
+		FileOutputStream outputStream = new FileOutputStream(tempFile);
+		try {
+			outputStream.write(data); // 将二进制数据写入到文件中
+		} finally {
+			outputStream.close(); // 关闭输出流
+		}
+	}
+
 	/**
 	 *file 转 MultipartFile
 	 * **/

+ 5 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/NewIOSSClientImpl.java

@@ -55,6 +55,11 @@ public class NewIOSSClientImpl implements NewIOSSClient {
         ossBuilder.template().removeFile(fileName);
     }
 
+    @Override
+    public void removeFiles(List<String> fileNames) {
+        ossBuilder.template().removeFiles(fileNames);
+    }
+
     @Override
     public BladeFile uploadFile(String fileName, String localFileUrl) {
         try {

+ 18 - 5
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -50,6 +50,7 @@ import org.springblade.manager.feign.WbsInfoClient;
 import org.springblade.manager.vo.ArchiveTreeContractVO2;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.feign.ProjectClient;
+import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.feign.IDictBizClient;
 import org.springframework.stereotype.Service;
@@ -77,6 +78,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 	private Map<String,Integer> indexMap = new HashMap<>(); //按立卷位区分和生成流水号
 	private IArchiveAutoPdfService archiveAutoPdfService;
+	private final NewIOSSClient iossClient;
 
 
 
@@ -295,11 +297,22 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		List<String> list = Arrays.asList(ids.split(","));
 		//查询出档案的文件
 		List<ArchiveFile> files = archiveFileClient.getAllArchiveFileByArchiveIds(list);
-		//销毁阿里云上文件
-
-		//删除文件
-		List<Long> collect = files.stream().map(file -> file.getId()).collect(Collectors.toList());
-		archiveFileClient.batchDeleteArchiveFile(collect);
+		if (files != null && files.size() > 0) {
+			//销毁阿里云上文件
+			List<String> removeFiles = new ArrayList<>();
+			for (ArchiveFile file : files) {
+				if (StringUtils.isNotBlank(file.getFileUrl())){
+					removeFiles.add(file.getFileUrl().substring(file.getFileUrl().lastIndexOf("upload")));
+				}
+				if (StringUtils.isNotBlank(file.getPdfFileUrl())){
+					removeFiles.add(file.getPdfFileUrl().substring(file.getPdfFileUrl().lastIndexOf("upload")));
+				}
+			}
+			iossClient.removeFiles(removeFiles);
+			//删除文件
+			List<Long> collect = files.stream().map(file -> file.getId()).collect(Collectors.toList());
+			archiveFileClient.batchDeleteArchiveFile(collect);
+		}
 		//删除案卷
 		baseMapper.deleteBatchIds(list);
 	}

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml

@@ -290,7 +290,7 @@
     </select>
     <select id="getAllArchiveFileByArchiveIds" resultType="org.springblade.business.entity.ArchiveFile">
         SELECT * FROM u_archive_file
-        WHERE archive_id in
+        WHERE is_deleted = 0 and archive_id in
         <foreach collection="ids" item="id" open="(" separator="," close=")">
             #{id}
         </foreach>