提交 a7b38daa 编写于 作者: F fengyw

修改

上级 5dcbc88e
package com.roncoo.education.common.core.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 上传方式
*
* @author LHR
*/
@Getter
@AllArgsConstructor
public enum UploadModeEnum {
LOCAL(1, "本地", "local"), MinIO(2, "MinIO", "minio");
private Integer code;
private String desc;
private String mode;
/**
* 根据编码获取枚举信息
*
* @param code 编码
* @return 枚举信息
*/
public static UploadModeEnum getByCode(Integer code) {
for (UploadModeEnum val : UploadModeEnum.values()) {
if (val.getCode().equals(code)) {
return val;
}
}
return null;
}
}
package com.roncoo.education.common.config;
import com.roncoo.education.common.core.tools.Constants;
import com.roncoo.education.common.upload.impl.LocalUploadImpl;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.AsyncHandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.servlet.http.HttpServletRequest;
......@@ -15,6 +17,12 @@ import javax.servlet.http.HttpServletResponse;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(LocalUploadImpl.PATH+"/**").addResourceLocations("file:" + LocalUploadImpl.LOCALPATH);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new InterceptorConfig());
......
package com.roncoo.education.common.upload;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 交易下单通知
*
* @author LYQ
*/
@Data
@Accessors(chain = true)
public class Upload implements Serializable {
private static final long serialVersionUID = 1195869049655301491L;
/**
* 存储平台,参考:UploadModeEnum
*/
private String storagePlatform;
/**
* 站点域名
*/
private String websiteDomain;
/**
* MinIO
*/
private String minioDomain;
private String minioBucket;
}
package com.roncoo.education.common.upload;
import org.springframework.web.multipart.MultipartFile;
/**
* 上传功能
*/
public interface UploadFace {
/**
* 图片上传
* @return 图片url
*/
String uploadPic(MultipartFile file, Upload upload);
}
package com.roncoo.education.common.upload.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import com.roncoo.education.common.upload.Upload;
import com.roncoo.education.common.upload.UploadFace;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
/**
* @author fengyw
*/
@Slf4j
@Component(value = "local")
public class LocalUploadImpl implements UploadFace {
public static final String LOCALPATH = System.getProperty("user.dir") + "/files/images/";
public static final String PATH = "/system/images/";
@Override
public String uploadPic(MultipartFile file, Upload upload) {
String fileName = IdUtil.simpleUUID() + FileUtil.getSuffix(file.getOriginalFilename());
try {
file.transferTo(new File(LOCALPATH +fileName));
} catch (IOException e) {
log.error("本地上传错误", e);
return "";
}
return upload.getWebsiteDomain() + "gateway/system" + PATH + fileName;
}
}
package com.roncoo.education.common.upload.impl;
import cn.hutool.core.util.ObjectUtil;
import com.roncoo.education.common.core.base.BaseException;
import com.roncoo.education.common.upload.Upload;
import com.roncoo.education.common.upload.UploadFace;
import io.minio.MinioClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
@Slf4j
@Component(value = "minio")
public class MinIOUploadImpl implements UploadFace {
/**
* 按需引入,需要打开jar
*/
@Autowired(required = false)
private MinioClient minioClient;
@Override
public String uploadPic(MultipartFile file, Upload upload) {
if(ObjectUtil.isEmpty(minioClient)){
throw new BaseException("请完成MinIO的配置");
}
return null;
}
}
......@@ -71,4 +71,6 @@ public interface SysConfigDao {
* @return 系统配置数量
*/
int countByExample(SysConfigExample example);
SysConfig getByConfigKey(String configKey);
}
package com.roncoo.education.system.dao.impl;
import cn.hutool.core.collection.CollUtil;
import com.roncoo.education.common.core.base.Page;
import com.roncoo.education.common.core.base.PageUtil;
import com.roncoo.education.common.core.tools.IdWorker;
......@@ -71,4 +72,16 @@ public class SysConfigDaoImpl implements SysConfigDao {
public int countByExample(SysConfigExample example) {
return this.mapper.countByExample(example);
}
@Override
public SysConfig getByConfigKey(String configKey) {
SysConfigExample example = new SysConfigExample();
example.createCriteria().andConfigKeyEqualTo(configKey);
example.setOrderByClause("sort asc, id desc");
List<SysConfig> configList = this.mapper.selectByExampleWithBLOBs(example);
if(CollUtil.isNotEmpty(configList)){
return configList.get(0);
}
return null;
}
}
package com.roncoo.education.system.service.admin;
import com.roncoo.education.common.core.base.Result;
import com.roncoo.education.common.service.BaseController;
import com.roncoo.education.system.service.admin.biz.AdminUploadBiz;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
/**
* 上传接口
*
* @author wuyun
*/
@Api(tags = "Admin-上传接口")
@RestController
@RequestMapping(value = "/system/admin/upload")
public class AdminUploadController extends BaseController {
@Autowired
private AdminUploadBiz biz;
@ApiOperation(value = "上传图片", notes = "服务端上传图片接口,只支持图片格式")
@ApiImplicitParam(name = "picFile", value = "图片文件", dataType = "File", dataTypeClass = File.class, paramType = "query", required = true)
@PostMapping(value = "/pic")
public Result<String> uploadPic(@RequestParam(value = "picFile", required = false) MultipartFile picFile) {
return biz.uploadPic(picFile);
}
@ApiOperation(value = "上传文档", notes = "服务端上传文档接口,只支持文档格式")
@ApiImplicitParam(name = "docFile", value = "文档文件", dataType = "File", dataTypeClass = File.class, paramType = "query", required = true)
@PostMapping(value = "/doc")
public Result<String> uploadDoc(@RequestParam(name = "docFile", required = false) MultipartFile docFile) {
return biz.uploadDoc(docFile);
}
}
/**
* Copyright 2015-现在 广州市领课网络科技有限公司
*/
package com.roncoo.education.system.service.admin.biz;
import cn.hutool.core.util.ObjectUtil;
import com.roncoo.education.common.core.base.Result;
import com.roncoo.education.common.core.enums.UploadModeEnum;
import com.roncoo.education.common.core.tools.BeanUtil;
import com.roncoo.education.common.upload.Upload;
import com.roncoo.education.common.upload.UploadFace;
import com.roncoo.education.system.dao.SysConfigDao;
import com.roncoo.education.system.dao.impl.mapper.entity.SysConfig;
import com.roncoo.education.system.dao.impl.mapper.entity.SysConfigExample;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 上传接口
*
* @author wuyun
*/
@Slf4j
@Component
public class AdminUploadBiz {
@Autowired
private Map<String, UploadFace> uploadFaceMap;
@Autowired
private SysConfigDao sysConfigDao;
public Result<String> uploadPic(MultipartFile picFile) {
Upload upload = getUploadForSysConfig();
if(ObjectUtil.isNotEmpty(upload)|| StringUtils.isEmpty(upload.getStoragePlatform())){
UploadFace uploadFace = uploadFaceMap.get(UploadModeEnum.getByCode(Integer.valueOf(upload.getStoragePlatform())));
String fileUrl = uploadFace.uploadPic(picFile, upload);
return Result.success(fileUrl);
}
return Result.error("上传参数配置");
}
public Result<String> uploadDoc(MultipartFile docFile) {
return null;
}
private Upload getUploadForSysConfig() {
SysConfigExample example = new SysConfigExample();
List<SysConfig> sysConfigs = sysConfigDao.listByExample(example);
Map<String, String> map = sysConfigs.stream().collect(Collectors.toMap(SysConfig::getConfigKey, SysConfig::getConfigValue));
return BeanUtil.objToBean(map, Upload.class);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册