完善文件上传存储服务

This commit is contained in:
weiweiw 2024-09-25 09:02:22 +08:00
parent e59cffb388
commit ba5616e5c8
9 changed files with 50 additions and 10 deletions

View File

@ -3,7 +3,9 @@ package com.bonus.system.api;
import com.bonus.common.core.web.domain.AjaxResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
import com.bonus.common.core.constant.ServiceNameConstants;
@ -34,4 +36,13 @@ public interface RemoteFileService
*/
@PostMapping(value = "/uploadFiles", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public AjaxResult uploadFile(@RequestPart(value = "files") MultipartFile[] files);
/**
* 文件删除
* 从各个存储平台删除文件
* @param objectKey * @param objectKey除mongodb 存fileid之外其他均存上传文件的网络路径
* @return 成功或失败信息
*/
@DeleteMapping("/deleteFile")
public AjaxResult deleteFile(@RequestParam("objectKey") String objectKey);
}

View File

@ -36,6 +36,11 @@ public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileServ
public AjaxResult uploadFile(MultipartFile[] files) {
return AjaxResult.error("多上传文件失败:" + throwable.getMessage());
}
@Override
public AjaxResult deleteFile(String objectKey) {
return AjaxResult.error("删除文件失败:" + throwable.getMessage());
}
};
}
}

View File

@ -30,7 +30,7 @@ public class MimeTypeUtils
// 图片
"bmp", "gif", "jpg", "jpeg", "png",
// word excel powerpoint
"doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt",
"doc", "docx", "xls", "xlsx","csv", "ppt", "pptx", "html", "htm", "txt",
// 压缩文件
"rar", "zip", "gz", "bz2",
// 视频格式

View File

@ -7,6 +7,7 @@ import java.util.ArrayList;
import java.util.List;
import com.alibaba.nacos.common.utils.IoUtils;
import com.bonus.common.core.utils.file.MimeTypeUtils;
import com.bonus.file.service.ISysFileService;
import com.bonus.file.utils.FileUploadUtils;
import com.bonus.system.api.domain.SysFile;
@ -49,6 +50,9 @@ public class FastDfsSysFileServiceImpl implements ISysFileService
@Override
public SysFile uploadFile(MultipartFile file) throws Exception
{
//验证文件扩展名是否合法
FileUploadUtils.assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
String fileName = FileUploadUtils.extractFilename(file);
InputStream inputStream = file.getInputStream();
StorePath storePath = storageClient.uploadFile(inputStream, file.getSize(),

View File

@ -4,6 +4,7 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import com.bonus.common.core.utils.file.MimeTypeUtils;
import com.bonus.file.service.ISysFileService;
import io.minio.RemoveObjectArgs;
import org.apache.commons.io.IOUtils;
@ -48,6 +49,9 @@ public class MinioSysFileServiceImpl implements ISysFileService
@Override
public SysFile uploadFile(MultipartFile file) throws Exception
{
//验证文件扩展名和大小
FileUploadUtils.assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
String fileName = FileUploadUtils.extractFilename(file);
InputStream inputStream = file.getInputStream();
PutObjectArgs args = PutObjectArgs.builder()

View File

@ -1,6 +1,8 @@
package com.bonus.file.service.impl;
import com.bonus.common.core.utils.file.MimeTypeUtils;
import com.bonus.file.service.ISysFileService;
import com.bonus.file.utils.FileUploadUtils;
import com.bonus.system.api.domain.SysFile;
import com.mongodb.client.gridfs.model.GridFSFile;
@ -52,6 +54,10 @@ public class MongodbServiceImpl implements ISysFileService {
@Override
public SysFile uploadFile(MultipartFile file) throws Exception {
//验证文件扩展名和大小
FileUploadUtils.assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
String fileName = file.getOriginalFilename();
long fileSize = file.getSize();

View File

@ -1,7 +1,9 @@
package com.bonus.file.service.impl;
import com.bonus.common.core.domain.R;
import com.bonus.common.core.utils.file.MimeTypeUtils;
import com.bonus.file.service.ISysFileService;
import com.bonus.file.utils.FileUploadUtils;
import com.bonus.file.utils.ObsUtils;
import com.alibaba.nacos.common.utils.UuidUtils;
import com.bonus.common.core.utils.file.FileUtils;
@ -46,18 +48,20 @@ public class ObsServiceImpl implements ISysFileService {
* @return 文件信息
*/
@Override
public SysFile uploadFile(MultipartFile file) {
public SysFile uploadFile(MultipartFile file) throws Exception {
try {
//验证文件扩展名和大小
FileUploadUtils.assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
String originalFilename = Objects.requireNonNull(file.getOriginalFilename(), "文件名不能为空");
String extension = originalFilename.substring(originalFilename.lastIndexOf('.'));
String objectKey = UuidUtils.generateUuid() + extension;
objectKey = FileUtils.generateObjectName(objectKey);
SysFile sysFile = obsUtils.uploadFile(objectKey, FileUtils.multipartFileToFile(file));
SysFile sysFile = obsUtils.uploadFile(objectKey, Objects.requireNonNull(FileUtils.multipartFileToFile(file)));
sysFile.setName(originalFilename);
return sysFile;
} catch (Exception e) {
return null;
throw new Exception(e);
}
}

View File

@ -5,8 +5,10 @@ import com.aliyun.oss.model.OSSObject;
import com.bonus.common.core.domain.R;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.utils.file.FileUtils;
import com.bonus.common.core.utils.file.MimeTypeUtils;
import com.bonus.file.controller.SysFileController;
import com.bonus.file.service.ISysFileService;
import com.bonus.file.utils.FileUploadUtils;
import com.bonus.file.utils.OssUtils;
import com.bonus.system.api.domain.SysFile;
import org.apache.commons.lang3.ObjectUtils;
@ -54,6 +56,9 @@ public class OssServiceImpl implements ISysFileService {
throw new Exception("文件名为空");
}
try {
//验证文件扩展名和大小
FileUploadUtils.assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
String originalFilename = Objects.requireNonNull(file.getOriginalFilename(), "文件名不能为空");
String extension = originalFilename.substring(originalFilename.lastIndexOf('.'));
String objectKey = UuidUtils.generateUuid() + extension;

View File

@ -127,11 +127,12 @@ public class FileUploadUtils
public static final void assertAllowed(MultipartFile file, String[] allowedExtension)
throws FileSizeLimitExceededException, InvalidExtensionException
{
long size = file.getSize();
if (size > DEFAULT_MAX_SIZE)
{
throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);
}
// 这里不验证文件大小使用Spring MVC中上传文件的最大大小 spring.servlet.multipart.max-file-size
// long size = file.getSize();
// if (size > DEFAULT_MAX_SIZE)
// {
// throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);
// }
String fileName = file.getOriginalFilename();
String extension = FileTypeUtils.getExtension(file);