Explorar o código

文件上传功能优化

liubo %!s(int64=2) %!d(string=hai) anos
pai
achega
c156f3b610

+ 5 - 4
zd-modules/zd-base/src/main/java/com/zd/base/files/file/controller/SysFileController.java

@@ -2,7 +2,7 @@ package com.zd.base.files.file.controller;
 
 
 import com.zd.base.files.file.enums.FileEnum;
 import com.zd.base.files.file.enums.FileEnum;
 import com.zd.base.files.file.service.ISysFileService;
 import com.zd.base.files.file.service.ISysFileService;
-import com.zd.base.files.file.utils.FileUploadUtils;
+import com.zd.common.core.utils.DateUtils;
 import com.zd.common.core.utils.file.FileUtils;
 import com.zd.common.core.utils.file.FileUtils;
 import com.zd.model.domain.R;
 import com.zd.model.domain.R;
 import com.zd.model.entity.SysFile;
 import com.zd.model.entity.SysFile;
@@ -11,10 +11,10 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 
 
@@ -35,8 +35,9 @@ public class SysFileController {
      * 文件上传请求
      * 文件上传请求
      */
      */
     @PostMapping("/upload")
     @PostMapping("/upload")
-    public R<SysFile> upload(MultipartFile file) {
+    public R<SysFile> upload(MultipartFile file, @RequestParam(required = false, value = "ifAsy") Boolean ifAsy) {
         try {
         try {
+            log.info("文件开始上传时间:" + DateUtils.getTime());
             String fileSuffix = "";
             String fileSuffix = "";
             String originalFilename = file.getOriginalFilename();
             String originalFilename = file.getOriginalFilename();
             if (FileEnum.getPrefix(originalFilename) != null) {
             if (FileEnum.getPrefix(originalFilename) != null) {
@@ -47,7 +48,7 @@ public class SysFileController {
             List<String> list = Arrays.asList(".jpg", ".png", ".jpeg", ".gif", ".bmp", ".ico", ".pdf", ".doc", ".docx", ".ppt", ".pptx", ".mp3", ".mp4", ".avi", ".xls", ".xlsx", ".csv", ".txt", ".apk");
             List<String> list = Arrays.asList(".jpg", ".png", ".jpeg", ".gif", ".bmp", ".ico", ".pdf", ".doc", ".docx", ".ppt", ".pptx", ".mp3", ".mp4", ".avi", ".xls", ".xlsx", ".csv", ".txt", ".apk");
             if (list.contains(fileSuffix.toLowerCase())) {
             if (list.contains(fileSuffix.toLowerCase())) {
                 // 上传并返回访问地址
                 // 上传并返回访问地址
-                String url = sysFileService.uploadFile(file);
+                String url = sysFileService.uploadFile(file, ifAsy);
                 SysFile sysFile = new SysFile();
                 SysFile sysFile = new SysFile();
                 sysFile.setName(FileUtils.getName(url));
                 sysFile.setName(FileUtils.getName(url));
                 sysFile.setUrl(url);
                 sysFile.setUrl(url);

+ 1 - 1
zd-modules/zd-base/src/main/java/com/zd/base/files/file/service/FastDfsSysFileServiceImpl.java

@@ -32,7 +32,7 @@ public class FastDfsSysFileServiceImpl implements ISysFileService {
      * @throws Exception
      * @throws Exception
      */
      */
     @Override
     @Override
-    public String uploadFile(MultipartFile file) throws Exception {
+    public String uploadFile(MultipartFile file, Boolean ifAsy) throws Exception {
         StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(),
         StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(),
                 FilenameUtils.getExtension(file.getOriginalFilename()), null);
                 FilenameUtils.getExtension(file.getOriginalFilename()), null);
         return domain + "/" + storePath.getFullPath();
         return domain + "/" + storePath.getFullPath();

+ 1 - 1
zd-modules/zd-base/src/main/java/com/zd/base/files/file/service/ISysFileService.java

@@ -15,5 +15,5 @@ public interface ISysFileService {
      * @return 访问地址
      * @return 访问地址
      * @throws Exception
      * @throws Exception
      */
      */
-    public String uploadFile(MultipartFile file) throws Exception;
+    public String uploadFile(MultipartFile file, Boolean ifAsy) throws Exception;
 }
 }

+ 2 - 2
zd-modules/zd-base/src/main/java/com/zd/base/files/file/service/LocalSysFileServiceImpl.java

@@ -24,8 +24,8 @@ public class LocalSysFileServiceImpl implements ISysFileService {
      * @throws Exception
      * @throws Exception
      */
      */
     @Override
     @Override
-    public String uploadFile(MultipartFile file) throws Exception {
-        String name = FileUploadUtils.upload(ResourcesConfig.filePath, file);
+    public String uploadFile(MultipartFile file, Boolean ifAsy) throws Exception {
+        String name = FileUploadUtils.upload(ResourcesConfig.filePath, file, ifAsy);
         //TODO 去掉拼接前缀
         //TODO 去掉拼接前缀
 //        String urlPrefix = domain;
 //        String urlPrefix = domain;
 //        String localIP = "127.0.0.1";
 //        String localIP = "127.0.0.1";

+ 1 - 1
zd-modules/zd-base/src/main/java/com/zd/base/files/file/service/MinioSysFileServiceImpl.java

@@ -30,7 +30,7 @@ public class MinioSysFileServiceImpl implements ISysFileService {
      * @throws Exception
      * @throws Exception
      */
      */
     @Override
     @Override
-    public String uploadFile(MultipartFile file) throws Exception {
+    public String uploadFile(MultipartFile file, Boolean ifAsy) throws Exception {
         String fileName = FileUploadUtils.extractFilename(file);
         String fileName = FileUploadUtils.extractFilename(file);
         PutObjectArgs args = PutObjectArgs.builder()
         PutObjectArgs args = PutObjectArgs.builder()
                 .bucket(minioConfig.getBucketName())
                 .bucket(minioConfig.getBucketName())

+ 30 - 11
zd-modules/zd-base/src/main/java/com/zd/base/files/file/utils/FileUploadUtils.java

@@ -1,5 +1,6 @@
 package com.zd.base.files.file.utils;
 package com.zd.base.files.file.utils;
 
 
+import cn.hutool.core.thread.ThreadUtil;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.exception.file.FileNameLengthLimitExceededException;
 import com.zd.common.core.exception.file.FileNameLengthLimitExceededException;
 import com.zd.common.core.exception.file.FileSizeLimitExceededException;
 import com.zd.common.core.exception.file.FileSizeLimitExceededException;
@@ -8,6 +9,7 @@ import com.zd.common.core.utils.DateUtils;
 import com.zd.common.core.utils.IdUtils;
 import com.zd.common.core.utils.IdUtils;
 import com.zd.common.core.utils.StringUtils;
 import com.zd.common.core.utils.StringUtils;
 import com.zd.common.core.utils.file.MimeTypeUtils;
 import com.zd.common.core.utils.file.MimeTypeUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
@@ -19,6 +21,7 @@ import java.io.IOException;
  *
  *
  * @author zd
  * @author zd
  */
  */
+@Slf4j
 public class FileUploadUtils {
 public class FileUploadUtils {
     /**
     /**
      * 默认大小 50M
      * 默认大小 50M
@@ -38,9 +41,9 @@ public class FileUploadUtils {
      * @return 文件名称
      * @return 文件名称
      * @throws IOException
      * @throws IOException
      */
      */
-    public static final String upload(String baseDir, MultipartFile file) throws IOException {
+    public static final String upload(String baseDir, MultipartFile file, Boolean ifAsy) throws IOException {
         try {
         try {
-            return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
+            return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, ifAsy);
         } catch (Exception e) {
         } catch (Exception e) {
             throw new IOException(e.getMessage(), e);
             throw new IOException(e.getMessage(), e);
         }
         }
@@ -58,7 +61,7 @@ public class FileUploadUtils {
      * @throws IOException                          比如读写文件出错时
      * @throws IOException                          比如读写文件出错时
      * @throws InvalidExtensionException            文件校验异常
      * @throws InvalidExtensionException            文件校验异常
      */
      */
-    public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension)
+    public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension, Boolean ifAsy)
             throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
             throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
             InvalidExtensionException {
             InvalidExtensionException {
         int fileNamelength = file.getOriginalFilename().length();
         int fileNamelength = file.getOriginalFilename().length();
@@ -71,9 +74,28 @@ public class FileUploadUtils {
 
 
         String fileName = extractFilename(file);
         String fileName = extractFilename(file);
 
 
-        File desc = getAbsoluteFile(baseDir, fileName);
-        file.transferTo(desc);
+        if(ifAsy == null || !ifAsy){
+            File desc = getAbsoluteFile(baseDir, fileName);
+            file.transferTo(desc);
+        }else {
+            ThreadUtil.execute(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        File desc = getAbsoluteFile(baseDir, fileName);
+                        file.transferTo(desc);
+                        log.info("文件异步上传成功:" + fileName);
+                        log.info("文件成功上传时间:" + DateUtils.getTime());
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                        log.error("文件异步上传出现异常:" + e.getMessage());
+                    }
+                }
+            });
+        }
+
         String pathFileName = getPathFileName(fileName);
         String pathFileName = getPathFileName(fileName);
+        log.info("文件结束上传时间:" + DateUtils.getTime());
         return pathFileName;
         return pathFileName;
     }
     }
 //
 //
@@ -112,13 +134,10 @@ public class FileUploadUtils {
      * 编码文件名
      * 编码文件名
      */
      */
     public static final String extractFilename(MultipartFile file) {
     public static final String extractFilename(MultipartFile file) {
-        String fileName = file.getOriginalFilename();
-        String extension = getExtension(file);
-        fileName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension;
-        return fileName;
+        return DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + getExtension(file);
     }
     }
 
 
-    private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException {
+    private static final File getAbsoluteFile(String uploadDir, String fileName){
         File desc = new File(uploadDir + File.separator + fileName);
         File desc = new File(uploadDir + File.separator + fileName);
 
 
         if (!desc.exists()) {
         if (!desc.exists()) {
@@ -129,7 +148,7 @@ public class FileUploadUtils {
         return desc.isAbsolute() ? desc : desc.getAbsoluteFile();
         return desc.isAbsolute() ? desc : desc.getAbsoluteFile();
     }
     }
 
 
-    private static final String getPathFileName(String fileName) throws IOException {
+    private static final String getPathFileName(String fileName){
         String pathFileName = "/" + fileName;
         String pathFileName = "/" + fileName;
         return pathFileName;
         return pathFileName;
     }
     }