快速上手
第一步:下载项目
将common-file-core模块导入自己项目
第二步:引入Maven
<dependency>
<groupId>com.wxm</groupId>
<artifactId>common-file-core</artifactId>
<version>1.0.0</version>
</dependency>
第三步:实现上传配置Service[UploadConfigService]
@Service
public class UploadConfigServiceImpl implements UploadConfigService {
/**
* 这里具体指定使用的是那个供应商的上传
* @param <T> T
* @return UploadBaseProperty<T>
*/
@Override
public <T> UploadBaseProperty<T> getFileSupplierProperty() {
LocalOssProperty localOssProperty = new LocalOssProperty();
localOssProperty.setStoreAddress("E:/");
localOssProperty.setRootPath("E:/");
return localOssProperty;
}
/**
* 配置文件[最大上传额度]
* @return
*/
@Override
public UploadConfigVo getUploadConfigVo() {
UploadConfigVo uploadConfigVo = new UploadConfigVo();
uploadConfigVo.setMaxSize(100 * 1024L); //最大上传
uploadConfigVo.setRenTag(YesNoConstant.YES);//开启重命名
return uploadConfigVo;
}
/**
* 文件上传成功后的操作 可以将上传记录进行保存
* @return Consumer<UploadFileResult>
*/
@Override
public Consumer<UploadFileResult> uploadAfter() {
return item -> {
log.info("文件上传成功: {}",item.getAccessPath());
};
}
/**
* 文件删除成功后的操作 可以将上传记录进行删除
* @return Consumer<DeleteFileResult>
*/
@Override
public Consumer<DeleteFileResult> deleteAfter() {
return item ->{
log.info("文件删除成功: {}",item.getAccessPath());
};
}
/**
* 是否开启文件MD5校验
* @return boolean
*/
@Override
public boolean checkFileMd5() {
//开启MD5校验
return true;
}
/**
* 开启MD5后会走这个方法 进行数据库查询,如果查询到相同MD5的文件返回文件的访问路径 后面就直接返回不在进行上传
* @param nowFileMd5 上传文件的MD5
* @return 如果返回空串或NULL会继续上传 否则上传结束[将当前方法返回的访问路径进行返回]
*/
@Override
public String doCheckFileMd5(String nowFileMd5) {
log.info("比对文件MD5信息: {}",nowFileMd5);
return "E:/模拟MD5对比成功返回旧的文件URL";
}
/**
* MD5eq后相同之后走的方法 可以进行更新上传时间
* @return Consumer<String>
*/
@Override
public Consumer<String> md5EqAfter() {
return item ->{
log.info("MD5文件比对成功: {} 更新上传时间",item);
};
}
}
第四步:使用上传类进行上传
UploadFileResult upload = imgUploadService.upload(0,file);
UploadFileResult upload = imgUploadService.upload(0,file,“A”,“B”);
拓展上传的供应商
1.加入供应商配置类 继承 UploadBaseProperty
fileSupplierEnum() : 获取供应商类型
supplierService() : 获取供应商的实现
public class LocalOssProperty extends UploadBaseProperty<LocalOssProperty>{
@Override
public FileSupplierEnum fileSupplierEnum() {
return FileSupplierEnum.LOCAL;//绑定的供应商枚举
}
@Override
public LocalOssProperty uploadProperty() {
return this;//当前配置
}
@Override
public Class<? extends SupplierBaseService> supplierService() {
return LocalOssService.class;//绑定的上传实现Service
}
}
2.加入供应商枚举 FileSupplierEnum
type : 供应商标识[不可重复]
name : 供应商名称
clazz : 供应商配置类 即上方继承UploadBaseProperty的实体类
3.加入供应商上传的实现类 继承 SupplierBaseService
init() : 用于初始化一些配置信息
uploading() : 流上传
delete() : 删除
public class LocalOssService implements SupplierBaseService{
private LocalOssProperty localOssProperty;
@Override
public void init(UploadBaseProperty<?> uploadBaseProperty) {
//初始化操作
this.localOssProperty = (LocalOssProperty) uploadBaseProperty;
}
@Override
public String uploading(InputStream inputStream, String fileName) throws Exception {
//流上传
}
@Override
public void delete(String filePath) throws Exception{
//删除
}
}
4.将上传的Service加入Spring的容器中
@Configuration
public class FileBeanConfig {
@Bean
public LocalOssService localOssService(){
return new LocalOssService();
}
}
拓展上传的类型
继承UploadBaseService 指定上传的 FileTypeEnum
public class ImgUploadService extends UploadBaseService {
@Override
protected FileTypeEnum fileType() {
return FileTypeEnum.IMG;
}
}
FileTypeEnum说明
type:类型
suffix:类型对应的后缀
比如拓展XML格式的上传 XML(“xml”,[".xml"])
测试效果
文件格式
修改ImgUploadService的fileType() 返回null
public class ImgUploadService extends UploadBaseService {
@Override
protected FileTypeEnum fileType() {
return null;
}
}
文件大小
修改UploadConfigVo的最大上传量
@Override
public UploadConfigVo getUploadConfigVo() {
UploadConfigVo uploadConfigVo = new UploadConfigVo();
uploadConfigVo.setMaxSize(50 * 1024L); //最大上传
uploadConfigVo.setRenTag(YesNoConstant.YES);//开启重命名
return uploadConfigVo;
}
重命名 开启则会在名称后面拼接UUID防止文件重名覆盖
uploadConfigVo.setRenTag(YesNoConstant.NO);//关闭重命名
注:关闭重命名可能导致文件名称相同 导致文件覆盖
MD5
模拟MD5比对成功
@Override
public String doCheckFileMd5(String nowFileMd5) {
log.info("比对文件MD5信息: {}",nowFileMd5);
return "E://模拟比对成功";
}
关闭MD5上传校验
@Override
public boolean checkFileMd5() {
return false;
}
删除
删除到最后一个文件时候,会删除空文件夹