|
@@ -1,5 +1,7 @@
|
|
|
package com.zd.base.files.file.utils;
|
|
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.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 +10,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 +22,7 @@ import java.io.IOException;
|
|
|
*
|
|
*
|
|
|
* @author zd
|
|
* @author zd
|
|
|
*/
|
|
*/
|
|
|
|
|
+@Slf4j
|
|
|
public class FileUploadUtils {
|
|
public class FileUploadUtils {
|
|
|
/**
|
|
/**
|
|
|
* 默认大小 50M
|
|
* 默认大小 50M
|
|
@@ -38,9 +42,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 +62,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,11 +75,63 @@ 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;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 生成文件存储信息(支持事件发布上传)
|
|
|
|
|
+ * @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) {
|
|
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()) {
|
|
|
if (!desc.getParentFile().exists()) {
|
|
if (!desc.getParentFile().exists()) {
|
|
|
desc.getParentFile().mkdirs();
|
|
desc.getParentFile().mkdirs();
|
|
@@ -129,7 +181,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;
|
|
|
}
|
|
}
|