linfutong пре 2 година
родитељ
комит
2735fc6074

+ 5 - 2
zd-modules/zd-base/src/main/java/com/zd/base/app/controller/LaboratoryApi.java

@@ -36,13 +36,16 @@ public class LaboratoryApi {
 
     /**
      * 预警 :实验室详情
+     * typeCollection 硬件类型集合(非必填)
      * @return
      */
     @GetMapping("/{id}")
     @ApiOperation("实验室详情")
-    public R querySub(@PathVariable("id") Long id)
+    public R querySub(@PathVariable("id") Long id,Long[] typeCollection)
     {
-        return remoteSubQueryService.getSafeWarnCount(id, SubQueryConfig.subQueryConfigWran);
+        SubQueryConfig subQueryConfig = SubQueryConfig.subQueryConfigWran;
+        subQueryConfig.setTypeCollection(typeCollection);
+        return remoteSubQueryService.getSafeWarnCount(id, subQueryConfig);
     }
 
     /**

+ 42 - 0
zd-modules/zd-base/src/main/java/com/zd/base/files/bigupload/controller/UploadController.java

@@ -5,6 +5,7 @@ import com.zd.base.files.bigupload.dto.FileChunkDTO;
 import com.zd.base.files.bigupload.dto.FileChunkResultDTO;
 import com.zd.base.files.bigupload.service.IUploadService;
 import com.zd.model.domain.ResultData;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
  **/
 @RestController
 @RequestMapping("/file/upload")
+@Slf4j
 public class UploadController {
 
     @Autowired
@@ -36,6 +38,30 @@ public class UploadController {
         }
     }
 
+    /**
+     * 检查分片是否存在
+     * @param identifier  文件秘钥
+     * @param filename 文件名
+     * @param totalChunks 分片总数
+     * @return
+     */
+    @GetMapping("/apk/chunk")
+    public ResultData<Object> checkChunkExist(@RequestParam("identifier") String identifier,
+                                              @RequestParam("filename") String filename,
+                                              @RequestParam("totalChunks") Integer totalChunks) {
+        FileChunkResultDTO fileChunkCheckDTO;
+        try {
+            log.info("apk文件上传入参 identifier {}, filename {}, totalChunks {}", identifier, filename, totalChunks);
+            FileChunkDTO chunkDTO = new FileChunkDTO();
+            chunkDTO.setIdentifier(identifier);
+            chunkDTO.setFilename(filename);
+            chunkDTO.setTotalChunks(totalChunks);
+            fileChunkCheckDTO = uploadService.checkChunkExist(chunkDTO);
+            return ResultData.success(fileChunkCheckDTO);
+        } catch (Exception e) {
+            return ResultData.fail(e.getMessage());
+        }
+    }
 
     /**
      * 上传文件分片
@@ -54,6 +80,22 @@ public class UploadController {
     }
 
     /**
+     * 上传文件分片
+     *
+     * @param chunkDTO
+     * @return
+     */
+    @PostMapping("/apk/chunk")
+    public ResultData<Object> uploadChunkByAPK(@RequestBody FileChunkDTO chunkDTO) {
+        try {
+            uploadService.uploadChunk(chunkDTO);
+            return ResultData.success(chunkDTO.getIdentifier());
+        } catch (Exception e) {
+            return ResultData.fail(e.getMessage());
+        }
+    }
+
+    /**
      * 请求合并文件分片
      *
      * @param chunkDTO

+ 15 - 4
zd-modules/zd-base/src/main/java/com/zd/base/files/bigupload/service/impl/UploadServiceImpl.java

@@ -18,6 +18,7 @@ import java.io.*;
 import java.net.UnknownHostException;
 import java.rmi.ServerException;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 
 /**
@@ -100,11 +101,19 @@ public class UploadServiceImpl implements IUploadService {
     @Override
     public String mergeChunk(String identifier, String fileName, Integer totalChunks) throws IOException {
         String suffix = fileName.substring(fileName.lastIndexOf("."));
+        String key = FILE_PREFIX + identifier;
         if(null==suffix){
+            redisTemplate.opsForHash().delete(key);
             throw new RuntimeException("文件格式有误");
         }
-        fileName= UUID.randomUUID().toString()+suffix;
-        return mergeChunks(identifier, fileName, totalChunks);
+        String fileUrl = (String) redisTemplate.opsForHash().get(key, "fileUrl");
+        if(fileUrl == null){
+            fileName= UUID.randomUUID().toString()+suffix;
+            fileUrl = mergeChunks(identifier, fileName, totalChunks);
+            redisTemplate.opsForHash().put(key, "fileUrl", fileUrl);
+        }
+
+        return fileUrl;
     }
 
     /**
@@ -202,6 +211,7 @@ public class UploadServiceImpl implements IUploadService {
      */
     private synchronized long saveToRedis(FileChunkDTO chunkDTO) {
         Set<Integer> uploaded = (Set<Integer>) redisTemplate.opsForHash().get(FILE_PREFIX + chunkDTO.getIdentifier(), "uploaded");
+        String key = FILE_PREFIX + chunkDTO.getIdentifier();
         if (uploaded == null) {
             uploaded = new HashSet<>(Arrays.asList(chunkDTO.getChunkNumber()));
             HashMap<String, Object> objectObjectHashMap = new HashMap<>();
@@ -209,10 +219,11 @@ public class UploadServiceImpl implements IUploadService {
             objectObjectHashMap.put("totalChunks", chunkDTO.getTotalChunks());
             objectObjectHashMap.put("totalSize", chunkDTO.getTotalSize());
             objectObjectHashMap.put("path", chunkDTO.getFilename());
-            redisTemplate.opsForHash().putAll(FILE_PREFIX + chunkDTO.getIdentifier(), objectObjectHashMap);
+            redisTemplate.opsForHash().putAll(key, objectObjectHashMap);
+            redisTemplate.expire(key, 5, TimeUnit.DAYS);
         } else {
             uploaded.add(chunkDTO.getChunkNumber());
-            redisTemplate.opsForHash().put(FILE_PREFIX + chunkDTO.getIdentifier(), "uploaded", uploaded);
+            redisTemplate.opsForHash().put(key, "uploaded", uploaded);
         }
         return uploaded.size();
     }

+ 39 - 10
zd-modules/zd-base/src/main/java/com/zd/base/files/file/controller/SysFileController.java

@@ -2,6 +2,7 @@ package com.zd.base.files.file.controller;
 
 import com.zd.base.files.file.enums.FileEnum;
 import com.zd.base.files.file.service.ISysFileService;
+import com.zd.common.core.utils.DateUtils;
 import com.zd.common.core.utils.file.FileUtils;
 import com.zd.model.domain.R;
 import com.zd.model.entity.SysFile;
@@ -10,9 +11,13 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 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.multipart.MultipartFile;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * 文件请求处理
  *
@@ -30,8 +35,9 @@ public class SysFileController {
      * 文件上传请求
      */
     @PostMapping("/upload")
-    public R<SysFile> upload(MultipartFile file) {
+    public R<SysFile> upload(MultipartFile file, @RequestParam(required = false, value = "ifAsy") Boolean ifAsy) {
         try {
+            log.info("文件开始上传时间:" + DateUtils.getTime());
             String fileSuffix = "";
             String originalFilename = file.getOriginalFilename();
             if (FileEnum.getPrefix(originalFilename) != null) {
@@ -39,17 +45,40 @@ public class SysFileController {
             }else {
                 fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
             }
-            String[] picSuffixList = {".jpg", ".png", ".jpeg", ".gif", ".bmp", ".ico", ".pdf", ".doc", ".docx", ".ppt", ".pptx", ".mp3", ".mp4", ".xls", ".xlsx", ".csv", ".txt"};
-            boolean suffixFlag = false;
-            for (String white_suffix : picSuffixList) {
-                if (fileSuffix.toLowerCase().equals(white_suffix)) {
-                    suffixFlag = true;
-                    break;
-                }
+            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())) {
+                // 上传并返回访问地址
+                String url = sysFileService.uploadFile(file, ifAsy);
+                SysFile sysFile = new SysFile();
+                sysFile.setName(FileUtils.getName(url));
+                sysFile.setUrl(url);
+                return R.ok(sysFile);
+            }
+            return R.fail("文件上传类型不正确!");
+        } catch (Exception e) {
+            log.error("上传文件失败", e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+    /**
+     * 文件上传(发布事件异步处理)
+     */
+    @PostMapping("/uploadByAsy")
+    public R<SysFile> uploadByAndroid(MultipartFile file) {
+        try {
+            log.info("文件开始上传时间:" + DateUtils.getTime());
+            String fileSuffix = "";
+            String originalFilename = file.getOriginalFilename();
+            if (FileEnum.getPrefix(originalFilename) != null) {
+                fileSuffix = FileEnum.getMessage(originalFilename);
+            }else {
+                fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
             }
-            if (suffixFlag) {
+            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())) {
                 // 上传并返回访问地址
-                String url = sysFileService.uploadFile(file);
+                String url = sysFileService.uploadFileByAsyEvent(file);
                 SysFile sysFile = new SysFile();
                 sysFile.setName(FileUtils.getName(url));
                 sysFile.setUrl(url);

+ 17 - 0
zd-modules/zd-base/src/main/java/com/zd/base/files/file/handle/FileAsyEvent.java

@@ -0,0 +1,17 @@
+package com.zd.base.files.file.handle;
+
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * <p>文件异步信息事件</p>
+ *
+ * @author linft
+ * @version 1.0
+ * @date 2/10/2023
+ */
+public class FileAsyEvent extends ApplicationEvent {
+
+    public FileAsyEvent(Object source) {
+        super(source);
+    }
+}

+ 31 - 0
zd-modules/zd-base/src/main/java/com/zd/base/files/file/handle/FileAsyHandle.java

@@ -0,0 +1,31 @@
+package com.zd.base.files.file.handle;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>事件发布</p>
+ *
+ * @author linft
+ * @version 1.0
+ * @date 2/10/2023
+ */
+@Slf4j
+@Service
+public class FileAsyHandle {
+
+    @Autowired
+    private ApplicationContext applicationContext;
+
+    /**
+     * 发布事件
+     * @param fileInfo
+     */
+    public void publishEvent(PublishFileInfo fileInfo) {
+        // 发布事件
+        applicationContext.publishEvent(new FileAsyEvent(fileInfo));
+        log.info("【发布文件上传事件】 信息内容:"+ fileInfo.toString());
+    }
+}

+ 33 - 0
zd-modules/zd-base/src/main/java/com/zd/base/files/file/handle/FileAsyListener.java

@@ -0,0 +1,33 @@
+package com.zd.base.files.file.handle;
+
+import com.zd.base.files.file.utils.FileUploadUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+/**
+ * <p>事件监听处理</p>
+ *
+ * @author linft
+ * @version 1.0
+ * @date 2/10/2023
+ */
+@Slf4j
+@Component
+public class FileAsyListener {
+
+    @Async
+    @EventListener(FileAsyEvent.class)
+    public void saveSysLog(FileAsyEvent event) {
+        PublishFileInfo fileInfo = (PublishFileInfo) event.getSource();
+        log.info("【监听文件上传事件】 监听到内容:"+ fileInfo.toString());
+        if (fileInfo != null && fileInfo.getFileName() != null) {
+            try {
+                FileUploadUtils.filePublishEventUpload(fileInfo);
+            } catch (Exception e) {
+                log.error("【文件异步事件上传失败】 文件信息:"+fileInfo.getFileName(),"失败原因:"+e);
+            }
+        }
+    }
+}

+ 66 - 0
zd-modules/zd-base/src/main/java/com/zd/base/files/file/handle/PublishFileInfo.java

@@ -0,0 +1,66 @@
+package com.zd.base.files.file.handle;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+
+/**
+ * <p>发布文件事件信息</p>
+ *
+ * @author linft
+ * @version 1.0
+ * @date 2/10/2023
+ */
+public class PublishFileInfo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String baseDir;
+
+    private String fileName;
+
+    private String filePath;
+
+    private MultipartFile file;
+
+    public String getBaseDir() {
+        return baseDir;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public String getFilePath() {
+        return filePath;
+    }
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setBaseDir(String baseDir) {
+        this.baseDir = baseDir;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public void setFilePath(String filePath) {
+        this.filePath = filePath;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+
+    @Override
+    public String toString() {
+        return "PublishFileInfo{" +
+                "baseDir='" + baseDir + '\'' +
+                ", fileName='" + fileName + '\'' +
+                ", filePath='" + filePath + '\'' +
+                ", file=" + file +
+                '}';
+    }
+}

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

@@ -32,9 +32,14 @@ public class FastDfsSysFileServiceImpl implements ISysFileService {
      * @throws Exception
      */
     @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(),
                 FilenameUtils.getExtension(file.getOriginalFilename()), null);
         return domain + "/" + storePath.getFullPath();
     }
+
+    @Override
+    public String uploadFileByAsyEvent(MultipartFile file) throws Exception {
+        return uploadFile(file, Boolean.FALSE);
+    }
 }

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

@@ -15,5 +15,14 @@ public interface ISysFileService {
      * @return 访问地址
      * @throws Exception
      */
-    public String uploadFile(MultipartFile file) throws Exception;
+    public String uploadFile(MultipartFile file, Boolean ifAsy) throws Exception;
+
+
+    /**
+     * 通过异步事件上传
+     * @param file
+     * @return
+     * @throws Exception
+     */
+    String uploadFileByAsyEvent(MultipartFile file) throws Exception;
 }

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

@@ -2,7 +2,10 @@ package com.zd.base.files.file.service;
 
 
 import com.zd.base.files.file.config.ResourcesConfig;
+import com.zd.base.files.file.handle.FileAsyHandle;
+import com.zd.base.files.file.handle.PublishFileInfo;
 import com.zd.base.files.file.utils.FileUploadUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -16,6 +19,8 @@ import org.springframework.web.multipart.MultipartFile;
 @Service
 public class LocalSysFileServiceImpl implements ISysFileService {
 
+    @Autowired
+    private FileAsyHandle fileAsyHandle;
     /**
      * 本地文件上传接口
      *
@@ -24,8 +29,8 @@ public class LocalSysFileServiceImpl implements ISysFileService {
      * @throws Exception
      */
     @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 去掉拼接前缀
 //        String urlPrefix = domain;
 //        String localIP = "127.0.0.1";
@@ -36,4 +41,12 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         String url =ResourcesConfig.filePrefix + name;
         return url;
     }
+
+    @Override
+    public String uploadFileByAsyEvent(MultipartFile file) throws Exception {
+        PublishFileInfo fileInfo = FileUploadUtils.generatorFileStoreInfo(ResourcesConfig.filePath, file);
+        //发布事件
+        fileAsyHandle.publishEvent(fileInfo);
+        return ResourcesConfig.filePrefix + fileInfo.getFilePath();
+    }
 }

+ 6 - 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
      */
     @Override
-    public String uploadFile(MultipartFile file) throws Exception {
+    public String uploadFile(MultipartFile file, Boolean ifAsy) throws Exception {
         String fileName = FileUploadUtils.extractFilename(file);
         PutObjectArgs args = PutObjectArgs.builder()
                 .bucket(minioConfig.getBucketName())
@@ -41,4 +41,9 @@ public class MinioSysFileServiceImpl implements ISysFileService {
         client.putObject(args);
         return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;
     }
+
+    @Override
+    public String uploadFileByAsyEvent(MultipartFile file) throws Exception {
+        return uploadFile(file, Boolean.FALSE);
+    }
 }

+ 64 - 12
zd-modules/zd-base/src/main/java/com/zd/base/files/file/utils/FileUploadUtils.java

@@ -1,5 +1,7 @@
 package com.zd.base.files.file.utils;
 
+import cn.hutool.core.thread.ThreadUtil;
+import com.zd.base.files.file.handle.PublishFileInfo;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.exception.file.FileNameLengthLimitExceededException;
 import com.zd.common.core.exception.file.FileSizeLimitExceededException;
@@ -8,6 +10,7 @@ import com.zd.common.core.utils.DateUtils;
 import com.zd.common.core.utils.IdUtils;
 import com.zd.common.core.utils.StringUtils;
 import com.zd.common.core.utils.file.MimeTypeUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -19,6 +22,7 @@ import java.io.IOException;
  *
  * @author zd
  */
+@Slf4j
 public class FileUploadUtils {
     /**
      * 默认大小 50M
@@ -38,9 +42,9 @@ public class FileUploadUtils {
      * @return 文件名称
      * @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 {
-            return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
+            return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, ifAsy);
         } catch (Exception e) {
             throw new IOException(e.getMessage(), e);
         }
@@ -58,7 +62,7 @@ public class FileUploadUtils {
      * @throws IOException                          比如读写文件出错时
      * @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,
             InvalidExtensionException {
         int fileNamelength = file.getOriginalFilename().length();
@@ -71,11 +75,63 @@ public class FileUploadUtils {
 
         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);
+        log.info("文件结束上传时间:" + DateUtils.getTime());
         return pathFileName;
     }
+
+    /**
+     * 生成文件存储信息(支持事件发布上传)
+     * @param baseDir
+     * @param file
+     * @return
+     */
+    public static final PublishFileInfo generatorFileStoreInfo(String baseDir, MultipartFile file) {
+        int length = file.getOriginalFilename().length();
+        if (length > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
+            throw new ServiceException("文件名过长,请修改后再次上传");
+        }
+        //assertAllowed(file, allowedExtension);
+        String fileName = extractFilename(file);
+        String path = getPathFileName(fileName);
+        //发布要上传的文件信息
+        PublishFileInfo fileInfo = new PublishFileInfo();
+        fileInfo.setBaseDir(baseDir);
+        fileInfo.setFileName(fileName);
+        fileInfo.setFilePath(path);
+        fileInfo.setFile(file);
+        return fileInfo;
+    }
+
+    /**
+     * 文件上传(支持事件发布上传)
+     * @param fileInfo
+     * @throws IOException
+     */
+    public static final void filePublishEventUpload(PublishFileInfo fileInfo) throws IOException {
+        File desc = getAbsoluteFile(fileInfo.getBaseDir(), fileInfo.getFileName());
+        fileInfo.getFile().transferTo(desc);
+    }
 //
 //    /**
 //     * 文件上传 -不修改文件名
@@ -112,15 +168,11 @@ public class FileUploadUtils {
      * 编码文件名
      */
     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);
-
         if (!desc.exists()) {
             if (!desc.getParentFile().exists()) {
                 desc.getParentFile().mkdirs();
@@ -129,7 +181,7 @@ public class FileUploadUtils {
         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;
         return pathFileName;
     }