完善文件上传存储服务

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 com.bonus.common.core.web.domain.AjaxResult;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType; 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.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.bonus.common.core.constant.ServiceNameConstants; import com.bonus.common.core.constant.ServiceNameConstants;
@ -34,4 +36,13 @@ public interface RemoteFileService
*/ */
@PostMapping(value = "/uploadFiles", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/uploadFiles", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public AjaxResult uploadFile(@RequestPart(value = "files") MultipartFile[] files); 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) { public AjaxResult uploadFile(MultipartFile[] files) {
return AjaxResult.error("多上传文件失败:" + throwable.getMessage()); 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", "bmp", "gif", "jpg", "jpeg", "png",
// word excel powerpoint // 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", "rar", "zip", "gz", "bz2",
// 视频格式 // 视频格式

View File

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

View File

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

View File

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

View File

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

View File

@ -127,11 +127,12 @@ public class FileUploadUtils
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(); // 这里不验证文件大小使用Spring MVC中上传文件的最大大小 spring.servlet.multipart.max-file-size
if (size > DEFAULT_MAX_SIZE) // long size = file.getSize();
{ // 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);