FILE:
上传文件根据配置文件中的最大大小和允许格式判断
master
xs 3 months ago
parent 5750356e43
commit f009ae4050

@ -13,8 +13,7 @@ import com.hw.file.utils.FileUploadUtils;
*/ */
@Primary @Primary
@Service @Service
public class LocalSysFileServiceImpl implements ISysFileService public class LocalSysFileServiceImpl implements ISysFileService {
{
/** /**
* *
*/ */
@ -46,6 +45,24 @@ public class LocalSysFileServiceImpl implements ISysFileService
public String shareFilePrefix; public String shareFilePrefix;
/**
*
*/
@Value("${file.defaultAllowedExtension}")
public String[] defaultAllowedExtension;
/**
*
*/
@Value("${file.defaultFileNameLength}")
public int defaultFileNameLength;
/**
*
*/
@Value("${file.defaultMaxSize}")
public long defaultMaxSize;
/** /**
* *
* *
@ -54,9 +71,8 @@ public class LocalSysFileServiceImpl implements ISysFileService
* @throws Exception * @throws Exception
*/ */
@Override @Override
public String uploadFile(MultipartFile file) throws Exception public String uploadFile(MultipartFile file) throws Exception {
{ String name = FileUploadUtils.upload(localFilePath, file, defaultAllowedExtension, defaultFileNameLength, defaultMaxSize);
String name = FileUploadUtils.upload(localFilePath, file);
String url = domain + localFilePrefix + name; String url = domain + localFilePrefix + name;
return url; return url;
} }
@ -70,9 +86,8 @@ public class LocalSysFileServiceImpl implements ISysFileService
* @throws Exception * @throws Exception
*/ */
@Override @Override
public String uploadFile2SharePath(MultipartFile file) throws Exception public String uploadFile2SharePath(MultipartFile file) throws Exception {
{ String name = FileUploadUtils.upload(shareFilePath, file, defaultAllowedExtension, defaultFileNameLength, defaultMaxSize);
String name = FileUploadUtils.upload(shareFilePath, file);
String url = domain + shareFilePrefix + name; String url = domain + shareFilePrefix + name;
return url; return url;
} }

@ -4,6 +4,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Objects; import java.util.Objects;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.hw.common.core.exception.file.FileException; import com.hw.common.core.exception.file.FileException;
@ -21,8 +22,7 @@ import com.hw.common.core.utils.uuid.Seq;
* *
* @author ruoyi * @author ruoyi
*/ */
public class FileUploadUtils public class FileUploadUtils {
{
/** /**
* 50M * 50M
*/ */
@ -37,22 +37,16 @@ public class FileUploadUtils
* *
* *
* @param baseDir * @param baseDir
* @param file * @param file
* @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) throws IOException {
{ try {
try
{
return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
} } catch (FileException fe) {
catch (FileException fe)
{
throw new IOException(fe.getDefaultMessage(), fe); throw new IOException(fe.getDefaultMessage(), fe);
} } catch (Exception e) {
catch (Exception e)
{
throw new IOException(e.getMessage(), e); throw new IOException(e.getMessage(), e);
} }
} }
@ -60,22 +54,20 @@ public class FileUploadUtils
/** /**
* *
* *
* @param baseDir * @param baseDir
* @param file * @param file
* @param allowedExtension * @param allowedExtension
* @return * @return
* @throws FileSizeLimitExceededException * @throws FileSizeLimitExceededException
* @throws FileNameLengthLimitExceededException * @throws FileNameLengthLimitExceededException
* @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)
throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
InvalidExtensionException InvalidExtensionException {
{
int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length(); int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length();
if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
{
throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
} }
@ -91,28 +83,23 @@ public class FileUploadUtils
/** /**
* *
*/ */
public static final String extractFilename(MultipartFile file) public static final String extractFilename(MultipartFile file) {
{
return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(),
FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), FileTypeUtils.getExtension(file)); FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), FileTypeUtils.getExtension(file));
} }
private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException {
{
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();
} }
} }
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) throws IOException {
{
String pathFileName = "/" + fileName; String pathFileName = "/" + fileName;
return pathFileName; return pathFileName;
} }
@ -122,43 +109,31 @@ public class FileUploadUtils
* *
* @param file * @param file
* @throws FileSizeLimitExceededException * @throws FileSizeLimitExceededException
* @throws InvalidExtensionException * @throws InvalidExtensionException
*/ */
public static final void assertAllowed(MultipartFile file, String[] allowedExtension) public static final void assertAllowed(MultipartFile file, String[] allowedExtension)
throws FileSizeLimitExceededException, InvalidExtensionException throws FileSizeLimitExceededException, InvalidExtensionException {
{
long size = file.getSize(); long size = file.getSize();
if (size > DEFAULT_MAX_SIZE) if (size > DEFAULT_MAX_SIZE) {
{
throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);
} }
String fileName = file.getOriginalFilename(); String fileName = file.getOriginalFilename();
String extension = FileTypeUtils.getExtension(file); String extension = FileTypeUtils.getExtension(file);
if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) {
{ if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) {
if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION)
{
throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,
fileName); fileName);
} } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) {
else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION)
{
throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,
fileName); fileName);
} } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) {
else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION)
{
throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,
fileName); fileName);
} } else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) {
else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION)
{
throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension, throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension,
fileName); fileName);
} } else {
else
{
throw new InvalidExtensionException(allowedExtension, extension, fileName); throw new InvalidExtensionException(allowedExtension, extension, fileName);
} }
} }
@ -167,19 +142,103 @@ public class FileUploadUtils
/** /**
* MIMEMIME * MIMEMIME
* *
* @param extension * @param extension
* @param allowedExtension * @param allowedExtension
* @return true/false * @return true/false
*/ */
public static final boolean isAllowedExtension(String extension, String[] allowedExtension) public static final boolean isAllowedExtension(String extension, String[] allowedExtension) {
{ for (String str : allowedExtension) {
for (String str : allowedExtension) if (str.equalsIgnoreCase(extension)) {
{
if (str.equalsIgnoreCase(extension))
{
return true; return true;
} }
} }
return false; return false;
} }
/**
*
*
* @param baseDir
* @param file
* @return
* @throws IOException
*/
public static final String upload(String baseDir, MultipartFile file,
String[] defaultAllowedExtension, int defaultFileNameLength, int defaultMaxSize) throws IOException {
try {
return upload(baseDir, file, defaultAllowedExtension,defaultFileNameLength, defaultMaxSize);
} catch (FileException fe) {
throw new IOException(fe.getDefaultMessage(), fe);
} catch (Exception e) {
throw new IOException(e.getMessage(), e);
}
}
/**
*
*
* @param baseDir
* @param file
* @param allowedExtension
* @return
* @throws FileSizeLimitExceededException
* @throws FileNameLengthLimitExceededException
* @throws IOException
* @throws InvalidExtensionException
*/
public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension,
int defaultFileNameLength,long defaultMaxSize)
throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
InvalidExtensionException {
int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length();
if (fileNamelength > defaultFileNameLength) {
throw new FileNameLengthLimitExceededException(defaultFileNameLength);
}
assertAllowed(file, allowedExtension,defaultMaxSize);
String fileName = extractFilename(file);
String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
file.transferTo(Paths.get(absPath));
return getPathFileName(fileName);
}
/**
*
*
* @param file
* @throws FileSizeLimitExceededException
* @throws InvalidExtensionException
*/
public static final void assertAllowed(MultipartFile file, String[] allowedExtension,long defaultMaxSize)
throws FileSizeLimitExceededException, InvalidExtensionException {
long size = file.getSize();
if (size > defaultMaxSize) {
throw new FileSizeLimitExceededException(defaultMaxSize / 1024 / 1024);
}
String fileName = file.getOriginalFilename();
String extension = FileTypeUtils.getExtension(file);
if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) {
if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) {
throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,
fileName);
} else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) {
throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,
fileName);
} else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) {
throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,
fileName);
} else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) {
throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension,
fileName);
} else {
throw new InvalidExtensionException(allowedExtension, extension, fileName);
}
}
}
} }
Loading…
Cancel
Save