From 032b976ab803a263e734dcdca3ceadaed48f1070 Mon Sep 17 00:00:00 2001
From: XiaoRuby <3114200645@qq.com>
Date: 星期四, 27 七月 2023 16:51:08 +0800
Subject: [PATCH] LIMS管理系统框架-开发7-27下班合并代码

---
 framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java |   69 ++++++++++++++++++++++++++++++----
 1 files changed, 61 insertions(+), 8 deletions(-)

diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java
index 75e28eb..1fd71d9 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java
@@ -1,10 +1,16 @@
 package com.yuanchu.limslaboratory.utils;
 
+import com.yuanchu.limslaboratory.exception.MyFileException;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.tomcat.util.http.fileupload.IOUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
+import org.springframework.util.FileSystemUtils;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.PostConstruct;
 import java.io.ByteArrayInputStream;
+import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 
@@ -16,32 +22,62 @@
 public class FileSaveUtil {
 
     // 鍙杫ml涓殑璺緞 + /
-//    @Value("${file.path}")
-    private String FILE_PATH;
+    private static String FILE_PATH;
 
+    private static String[] ALLOWED;
+
+    @Value("${file.path}")
+    private String file;
+
+    @Value("${file.allowed}")
+    private String[] allowed;
+
+    @PostConstruct
+    public void getFile() {
+        FILE_PATH = this.file;
+    }
+
+    @PostConstruct
+    public void getAllowed(){
+        ALLOWED = this.allowed;
+    }
     /**
      * 瀛樺偍鏂囦欢涓诲嚱鏁�
-     * @param content 鏂囦欢浜岃繘鍒舵祦
-     * @param originalFilename 鏂囦欢鍚嶇О
+     * @param file 鏂囦欢浜岃繘鍒舵祦
      * @return 杩斿洖鏂囦欢鍚嶇О鐢ㄤ簬瀛樺偍鏁版嵁搴�
      */
-    public String StoreFile(byte[] content, String originalFilename) {
+    public static String StoreFile(MultipartFile file) {
+        String originalFilename = file.getOriginalFilename();
         // 鐢熸垚闅忔満鍚嶇О锛氭椂闂確闅忔満6浣嶆暟瀛�
         String FileName = System.currentTimeMillis() + "_" + MyUtil.getNumber(6);
-        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
+        String suffix = null;
+        if (originalFilename != null) {
+            suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
+            // 濡傛灉鍚庣紑鍚嶄笉閫氳繃鎶涘嚭寮傚父
+            if (!isFileAllowed(suffix)){
+                throw  new MyFileException(suffix);
+            }
+        }
         // 鍚嶇О鎷兼帴
         String fileName = FileName + suffix;
         // 杩涜瀛樺偍
-        storeFileWithFileName(content, fileName);
+        try {
+            storeFileWithFileName(file.getBytes(), fileName);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
         return fileName;
     }
 
+    public static Boolean DeleteFile(String fileName) {
+        return FileSystemUtils.deleteRecursively(new File(FILE_PATH + "/" + fileName));
+    }
     /**
      * 瀛樺偍鏂囦欢鍑芥暟
      * @param content 鏂囦欢浜岃繘鍒舵祦
      * @param fileName 鏂囦欢鍚嶇О
      */
-    private void storeFileWithFileName(byte[] content, String fileName) {
+    private static void storeFileWithFileName(byte[] content, String fileName) {
         // 瀛樺偍璺緞
         String path = FILE_PATH + java.io.File.separatorChar;
         // 鐩綍涓嶅瓨鍦ㄥ垯鍒涘缓
@@ -57,4 +93,21 @@
             MyUtil.PrintLog("瀛樺偍鏂囦欢寮傚父锛�" + e);
         }
     }
+
+    /**
+     * 鍒ゆ柇鏂囦欢鏄惁琚厑璁镐笂浼�
+     *
+     * @param fileName 鏂囦欢鍚�
+     * @return 鍏佽true, 鍚﹀垯false
+     */
+    private static boolean isFileAllowed(String fileName) {
+        // 鑾峰彇鍚庣紑鍚�
+        String suffixName = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
+        for (String allow : ALLOWED) {
+            if (allow.equals(suffixName)) {
+                return true;
+            }
+        }
+        return false;
+    }
 }

--
Gitblit v1.9.3