共通文件上传->【七牛云/UFile/本地】

快速上手

第一步:下载项目

将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;
}

请添加图片描述

删除

请添加图片描述
请添加图片描述

删除到最后一个文件时候,会删除空文件夹
请添加图片描述

GITEE源码下载

GITEE链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小草王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值