fix-简化方法
This commit is contained in:
parent
44c877d2e1
commit
bd41c0d035
@ -62,25 +62,25 @@ public class BizException extends RuntimeException {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void error(boolean b, CodeEnum returnCode) {
|
public static void error(boolean b, CodeEnum returnCode) {
|
||||||
if (b) {
|
if (!b) {
|
||||||
throw new BizException(returnCode.getCode(), returnCode.getMessage(), null);
|
throw new BizException(returnCode.getCode(), returnCode.getMessage(), null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void error(boolean b, CodeEnum returnCode, String message) {
|
public static void error(boolean b, CodeEnum returnCode, String message) {
|
||||||
if (b) {
|
if (!b) {
|
||||||
throw new BizException(returnCode.getCode(), message, null);
|
throw new BizException(returnCode.getCode(), message, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void error(boolean b, Integer code, String message) {
|
public static void error(boolean b, Integer code, String message) {
|
||||||
if (b) {
|
if (!b) {
|
||||||
throw new BizException(code, message, null);
|
throw new BizException(code, message, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void error(boolean b, Integer code, String message, Object data) {
|
public static void error(boolean b, Integer code, String message, Object data) {
|
||||||
if (b) {
|
if (!b) {
|
||||||
throw new BizException(code, message, data);
|
throw new BizException(code, message, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,5 +16,5 @@ public interface AppChannelBucketManager {
|
|||||||
* @param appCode appcode
|
* @param appCode appcode
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<AppChannelBucket> getByAppCode(String appCode);
|
AppChannelBucket getByAppCode(String appCode);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package cn.axzo.oss.manager.api;
|
package cn.axzo.oss.manager.api;
|
||||||
|
|
||||||
|
import cn.axzo.oss.dal.entity.AppChannelBucket;
|
||||||
import cn.axzo.oss.dal.entity.FileChannel;
|
import cn.axzo.oss.dal.entity.FileChannel;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -21,8 +22,8 @@ public interface FileChannelManager {
|
|||||||
/**
|
/**
|
||||||
* 返回一个最优的渠道 升序第一个
|
* 返回一个最优的渠道 升序第一个
|
||||||
*
|
*
|
||||||
* @param channelCodes
|
* @param appChannelBuckets
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
FileChannel getOptimalChannel(List<String> channelCodes);
|
FileChannel getOptimalChannel(List<AppChannelBucket> appChannelBuckets );
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,8 +3,10 @@ package cn.axzo.oss.manager.impl;
|
|||||||
import cn.axzo.oss.common.enums.CodeEnum;
|
import cn.axzo.oss.common.enums.CodeEnum;
|
||||||
import cn.axzo.oss.common.exception.BizException;
|
import cn.axzo.oss.common.exception.BizException;
|
||||||
import cn.axzo.oss.dal.entity.AppChannelBucket;
|
import cn.axzo.oss.dal.entity.AppChannelBucket;
|
||||||
|
import cn.axzo.oss.dal.entity.FileChannel;
|
||||||
import cn.axzo.oss.dal.repository.AppChannelBucketDao;
|
import cn.axzo.oss.dal.repository.AppChannelBucketDao;
|
||||||
import cn.axzo.oss.manager.api.AppChannelBucketManager;
|
import cn.axzo.oss.manager.api.AppChannelBucketManager;
|
||||||
|
import cn.axzo.oss.manager.api.FileChannelManager;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -22,6 +24,9 @@ public class AppChannelBucketManagerImpl implements AppChannelBucketManager {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private AppChannelBucketDao appChannelBucketDao;
|
private AppChannelBucketDao appChannelBucketDao;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FileChannelManager fileChannelManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过appcode获取文件渠道桶信息
|
* 通过appcode获取文件渠道桶信息
|
||||||
*
|
*
|
||||||
@ -29,9 +34,18 @@ public class AppChannelBucketManagerImpl implements AppChannelBucketManager {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<AppChannelBucket> getByAppCode(String appCode) {
|
public AppChannelBucket getByAppCode(String appCode) {
|
||||||
List<AppChannelBucket> appChannelBuckets = appChannelBucketDao.getByAppCode(appCode);
|
List<AppChannelBucket> appChannelBuckets = appChannelBucketDao.getByAppCode(appCode);
|
||||||
BizException.isEmpty(appChannelBuckets, CodeEnum.APP_CHANNEL_BUCKET_NOT_FOUND);
|
BizException.isEmpty(appChannelBuckets, CodeEnum.APP_CHANNEL_BUCKET_NOT_FOUND);
|
||||||
return appChannelBuckets;
|
|
||||||
|
// 找到最优渠道
|
||||||
|
FileChannel fileChannel = fileChannelManager.getOptimalChannel(appChannelBuckets);
|
||||||
|
|
||||||
|
AppChannelBucket appChannelBucket = appChannelBuckets.stream().filter(bucket ->
|
||||||
|
bucket.getChannelCode().equals(fileChannel.getChannelCode()))
|
||||||
|
.findFirst().orElse(null);
|
||||||
|
BizException.isEmpty(appChannelBucket, CodeEnum.APP_CHANNEL_NOT_FOUND);
|
||||||
|
|
||||||
|
return appChannelBucket;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,9 +2,12 @@ package cn.axzo.oss.manager.impl;
|
|||||||
|
|
||||||
import cn.axzo.oss.common.enums.CodeEnum;
|
import cn.axzo.oss.common.enums.CodeEnum;
|
||||||
import cn.axzo.oss.common.exception.BizException;
|
import cn.axzo.oss.common.exception.BizException;
|
||||||
|
import cn.axzo.oss.dal.entity.AppChannelBucket;
|
||||||
import cn.axzo.oss.dal.entity.FileChannel;
|
import cn.axzo.oss.dal.entity.FileChannel;
|
||||||
import cn.axzo.oss.dal.repository.FileChannelDao;
|
import cn.axzo.oss.dal.repository.FileChannelDao;
|
||||||
import cn.axzo.oss.manager.api.FileChannelManager;
|
import cn.axzo.oss.manager.api.FileChannelManager;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -38,12 +41,15 @@ public class FileChannelManagerImpl implements FileChannelManager {
|
|||||||
/**
|
/**
|
||||||
* 返回一个最优的渠道 升序第一个
|
* 返回一个最优的渠道 升序第一个
|
||||||
*
|
*
|
||||||
* @param channelCodes
|
* @param appChannelBuckets
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public FileChannel getOptimalChannel(List<String> channelCodes) {
|
public FileChannel getOptimalChannel(List<AppChannelBucket> appChannelBuckets ) {
|
||||||
List<FileChannel> fileChannels = fileChannelDao.getByChannelCode(channelCodes);
|
ArrayList<String> channels = Lists.newArrayList();
|
||||||
|
appChannelBuckets.forEach(appChannelBucket -> channels.add(appChannelBucket.getChannelCode()));
|
||||||
|
|
||||||
|
List<FileChannel> fileChannels = fileChannelDao.getByChannelCode(channels);
|
||||||
BizException.isEmpty(fileChannels, CodeEnum.APP_CHANNEL_NOT_FOUND);
|
BizException.isEmpty(fileChannels, CodeEnum.APP_CHANNEL_NOT_FOUND);
|
||||||
return fileChannels.get(0);
|
return fileChannels.get(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -104,7 +104,7 @@ public class FileServiceImpl implements FileService {
|
|||||||
private void checkAppCode(final String appCode) {
|
private void checkAppCode(final String appCode) {
|
||||||
log.info("checkAppCode appCode = {}", appCode);
|
log.info("checkAppCode appCode = {}", appCode);
|
||||||
FileApp fileApp = fileAppDao.getByAppCode(appCode);
|
FileApp fileApp = fileAppDao.getByAppCode(appCode);
|
||||||
BizException.error(Utility.objIsNull(fileApp), CodeEnum.APP_CODE_NOT_FOUND);
|
BizException.error(Utility.objIsNotNull(fileApp), CodeEnum.APP_CODE_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -120,20 +120,7 @@ public class FileServiceImpl implements FileService {
|
|||||||
checkAppCode(dto.getAppCode());
|
checkAppCode(dto.getAppCode());
|
||||||
|
|
||||||
// 通过appcode获取文件渠道桶信息
|
// 通过appcode获取文件渠道桶信息
|
||||||
List<AppChannelBucket> appChannelBuckets = appChannelBucketManager
|
AppChannelBucket appChannelBucket = appChannelBucketManager.getByAppCode(dto.getAppCode());
|
||||||
.getByAppCode(dto.getAppCode());
|
|
||||||
|
|
||||||
// 暂无权限判断
|
|
||||||
|
|
||||||
// 找到最优渠道
|
|
||||||
ArrayList<String> channels = Lists.newArrayList();
|
|
||||||
appChannelBuckets.forEach(appChannelBucket -> channels.add(appChannelBucket.getChannelCode()));
|
|
||||||
FileChannel fileChannel = fileChannelManager.getOptimalChannel(channels);
|
|
||||||
|
|
||||||
AppChannelBucket appChannelBucket = appChannelBuckets.stream().filter(bucket ->
|
|
||||||
bucket.getChannelCode().equals(fileChannel.getChannelCode()))
|
|
||||||
.findFirst().orElse(null);
|
|
||||||
BizException.isEmpty(appChannelBucket, CodeEnum.APP_CHANNEL_NOT_FOUND);
|
|
||||||
|
|
||||||
// 通过渠道桶编码获取到具体文件业务场景
|
// 通过渠道桶编码获取到具体文件业务场景
|
||||||
FileBusinessScene scene = fileBusinessSceneManager
|
FileBusinessScene scene = fileBusinessSceneManager
|
||||||
@ -143,48 +130,10 @@ public class FileServiceImpl implements FileService {
|
|||||||
FileUploadConfig fileUploadConfig = fileUploadConfigManager
|
FileUploadConfig fileUploadConfig = fileUploadConfigManager
|
||||||
.getByUploadConfig(scene.getAppChannelBucketNo(), scene.getDirectory());
|
.getByUploadConfig(scene.getAppChannelBucketNo(), scene.getDirectory());
|
||||||
|
|
||||||
// 判断容量
|
// 上传文件并生成file对象
|
||||||
String fileConform = isFileConform(fileUploadConfig, dto.getFileContent().length,
|
File ossFile = generateFile(fileUploadConfig, dto);
|
||||||
dto.getFileName());
|
|
||||||
|
|
||||||
File ossFile = new File();
|
return setResponse(ossFile);
|
||||||
ossFile.setAppChannelBucketNo(fileUploadConfig.getAppChannelBucketNo());
|
|
||||||
ossFile.setAppCode(fileUploadConfig.getAppCode());
|
|
||||||
ossFile.setChannelCode(fileUploadConfig.getChannelCode());
|
|
||||||
ossFile.setBucketName(fileUploadConfig.getBucketName());
|
|
||||||
ossFile.setDirectory(fileUploadConfig.getDirectory());
|
|
||||||
ossFile.setFileMd5(Utility.getMd5(dto.getFileContent()));
|
|
||||||
ossFile.setStatus(FileStatusEnum.STATUS_PROCESSING.getCode());
|
|
||||||
ossFile.setFileFormat(fileConform);
|
|
||||||
ossFile.setFileName(dto.getFileName());
|
|
||||||
ossFile.setStorageUnit(fileUploadConfig.getStorageUnit());
|
|
||||||
ossFile.setStorageSize(fileUploadConfig.getStorageSize());
|
|
||||||
|
|
||||||
String uuid = Utility.getUUID();
|
|
||||||
|
|
||||||
// 生成上传文件的唯一key
|
|
||||||
String tgtFileKey = Utility.generateFileKey(fileUploadConfig.getDirectory(), uuid, fileConform);
|
|
||||||
|
|
||||||
String fileUrl = fileManager.uploadByStream(
|
|
||||||
fileUploadConfig.getBucketName(), tgtFileKey, dto.getFileContent());
|
|
||||||
if (Utility.isBlank(fileUrl)) {
|
|
||||||
ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_FAIL.getCode());
|
|
||||||
fileDao.save(ossFile);
|
|
||||||
throw new BizException(CodeEnum.FILE_UPLOAD_FAILED);
|
|
||||||
}
|
|
||||||
|
|
||||||
ossFile.setFileUuid(uuid);
|
|
||||||
ossFile.setFileUrl(fileUrl);
|
|
||||||
ossFile.setUrlMd5(Utility.getMd5(fileUrl));
|
|
||||||
ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_SUCCESS.getCode());
|
|
||||||
fileDao.save(ossFile);
|
|
||||||
|
|
||||||
ServerFileUploadResponse response = new ServerFileUploadResponse();
|
|
||||||
response.setUrl(ossFile.getFileUrl());
|
|
||||||
response.setUrlMd5(ossFile.getUrlMd5());
|
|
||||||
response.setFileKey(ossFile.getFileUuid());
|
|
||||||
|
|
||||||
return response;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -194,18 +143,68 @@ public class FileServiceImpl implements FileService {
|
|||||||
// 文件大小超出上限
|
// 文件大小超出上限
|
||||||
int size = Utility
|
int size = Utility
|
||||||
.capacityConversion(fileUploadConfig.getStorageSize(), fileUploadConfig.getStorageUnit());
|
.capacityConversion(fileUploadConfig.getStorageSize(), fileUploadConfig.getStorageUnit());
|
||||||
BizException.error(fileLength > size, CodeEnum.FILE_SIZE_EXCEEDS_LIMIT);
|
BizException.error(size > fileLength, CodeEnum.FILE_SIZE_EXCEEDS_LIMIT);
|
||||||
// 文件格式判断
|
// 文件格式判断
|
||||||
String[] formats = fileUploadConfig.getFileFormat().split(CommonConstants.COMMA);
|
String[] formats = fileUploadConfig.getFileFormat().split(CommonConstants.COMMA);
|
||||||
|
|
||||||
int lastIndexOf = fileName.lastIndexOf(CommonConstants.DOT);
|
int lastIndexOf = fileName.lastIndexOf(CommonConstants.DOT);
|
||||||
BizException.error(lastIndexOf == CommonConstants.NOT_FOUND_INDEX_OF, CodeEnum.NOT_FILE_FORMAT);
|
BizException
|
||||||
|
.error(lastIndexOf != CommonConstants.NOT_FOUND_INDEX_OF, CodeEnum.NOT_FILE_FORMAT);
|
||||||
|
|
||||||
// 是否包含指定格式
|
// 是否包含指定格式
|
||||||
String fileFormat = fileName.substring(lastIndexOf + CommonConstants.ONE).toLowerCase();
|
String fileFormat = fileName.substring(lastIndexOf + CommonConstants.ONE).toLowerCase();
|
||||||
boolean contains = Arrays.asList(formats).contains(fileFormat);
|
boolean contains = Arrays.asList(formats).contains(fileFormat);
|
||||||
BizException.error(!contains, CodeEnum.FILE_FORMAT_NOT_SUPPORTED);
|
BizException.error(contains, CodeEnum.FILE_FORMAT_NOT_SUPPORTED);
|
||||||
|
|
||||||
return fileFormat;
|
return fileFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private File generateFile(FileUploadConfig fileUploadConfig, ServerFileUploadDto dto) {
|
||||||
|
// 判断容量
|
||||||
|
String fileConform = isFileConform(fileUploadConfig, dto.getFileContent().length,
|
||||||
|
dto.getFileName());
|
||||||
|
|
||||||
|
String uuid = Utility.getUUID();
|
||||||
|
|
||||||
|
// 生成上传文件的唯一key
|
||||||
|
String tgtFileKey = Utility.generateFileKey(fileUploadConfig.getDirectory(), uuid, fileConform);
|
||||||
|
|
||||||
|
File ossFile = new File();
|
||||||
|
ossFile.setAppChannelBucketNo(fileUploadConfig.getAppChannelBucketNo());
|
||||||
|
ossFile.setAppCode(fileUploadConfig.getAppCode());
|
||||||
|
ossFile.setChannelCode(fileUploadConfig.getChannelCode());
|
||||||
|
ossFile.setBucketName(fileUploadConfig.getBucketName());
|
||||||
|
ossFile.setDirectory(fileUploadConfig.getDirectory());
|
||||||
|
ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_FAIL.getCode());
|
||||||
|
ossFile.setStorageUnit(fileUploadConfig.getStorageUnit());
|
||||||
|
ossFile.setStorageSize(fileUploadConfig.getStorageSize());
|
||||||
|
ossFile.setFileFormat(fileConform);
|
||||||
|
// 上传文件
|
||||||
|
String fileUrl = fileManager.uploadByStream(
|
||||||
|
fileUploadConfig.getBucketName(), tgtFileKey, dto.getFileContent());
|
||||||
|
|
||||||
|
// 保存失败
|
||||||
|
if (Utility.isBlank(fileUrl)) {
|
||||||
|
fileDao.save(ossFile);
|
||||||
|
throw new BizException(CodeEnum.FILE_UPLOAD_FAILED);
|
||||||
|
}
|
||||||
|
|
||||||
|
ossFile.setFileUuid(uuid);
|
||||||
|
ossFile.setFileUrl(fileUrl);
|
||||||
|
ossFile.setUrlMd5(Utility.getMd5(fileUrl));
|
||||||
|
ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_SUCCESS.getCode());
|
||||||
|
ossFile.setFileName(dto.getFileName());
|
||||||
|
ossFile.setFileMd5(Utility.getMd5(dto.getFileContent()));
|
||||||
|
fileDao.save(ossFile);
|
||||||
|
return ossFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ServerFileUploadResponse setResponse(File ossFile){
|
||||||
|
ServerFileUploadResponse response = new ServerFileUploadResponse();
|
||||||
|
response.setUrl(ossFile.getFileUrl());
|
||||||
|
response.setUrlMd5(ossFile.getUrlMd5());
|
||||||
|
response.setFileKey(ossFile.getFileUuid());
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,12 +4,10 @@ import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto;
|
|||||||
import cn.axzo.oss.manager.api.dto.request.ServerFileUploadDto;
|
import cn.axzo.oss.manager.api.dto.request.ServerFileUploadDto;
|
||||||
import cn.axzo.oss.service.api.FileService;
|
import cn.axzo.oss.service.api.FileService;
|
||||||
import cn.axzo.oss.test.base.SpringTestBase;
|
import cn.axzo.oss.test.base.SpringTestBase;
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
@ -38,9 +36,9 @@ public class FileServiceTest extends SpringTestBase {
|
|||||||
ServerFileUploadDto dto = new ServerFileUploadDto();
|
ServerFileUploadDto dto = new ServerFileUploadDto();
|
||||||
dto.setAppCode("test");
|
dto.setAppCode("test");
|
||||||
dto.setBizScene("1");
|
dto.setBizScene("1");
|
||||||
dto.setFileName("一个新的文件.jpg");
|
dto.setFileName("一个新的文件.xlsx");
|
||||||
|
|
||||||
File file = new File("/Users/zhangran/Desktop/xx/IMG_20210728_162815.jpg");
|
File file = new File("/Users/admin/Downloads/表扬人员名称.xlsx");
|
||||||
|
|
||||||
FileInputStream fileInputStream = null;
|
FileInputStream fileInputStream = null;
|
||||||
|
|
||||||
@ -53,9 +51,10 @@ public class FileServiceTest extends SpringTestBase {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
// System.out.println(Arrays.toString(bytes));
|
||||||
dto.setFileContent(bytes);
|
dto.setFileContent(bytes);
|
||||||
|
//
|
||||||
fileService.upload(dto);
|
// fileService.upload(dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user