完善文件上传存储服务
This commit is contained in:
parent
e59cffb388
commit
ba5616e5c8
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
// 视频格式
|
// 视频格式
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue