# common-file **Repository Path**: xiaomao2541864996/common-file ## Basic Information - **Project Name**: common-file - **Description**: 文件上传、三方文件上传、本地上传、七牛、阿里云、UFile、腾讯云 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2022-01-25 - **Last Updated**: 2024-06-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 快速上手 #### 第一步:下载项目 > 将common-file-core模块导入自己项目 #### 第二步:引入Maven ```maven com.wxm common-file-core 1.0.0 ``` #### 第三步:实现上传配置Service[UploadConfigService] ```java @Service public class UploadConfigServiceImpl implements UploadConfigService { /** * 这里具体指定使用的是那个供应商的上传 * @param T * @return UploadBaseProperty */ @Override public UploadBaseProperty 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 */ @Override public Consumer uploadAfter() { return item -> { log.info("文件上传成功: {}",item.getAccessPath()); }; } /** * 文件删除成功后的操作 可以将上传记录进行删除 * @return Consumer */ @Override public Consumer 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 */ @Override public Consumer 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() : 获取供应商的实现 > ```java public class LocalOssProperty extends UploadBaseProperty{ @Override public FileSupplierEnum fileSupplierEnum() { return FileSupplierEnum.LOCAL;//绑定的供应商枚举 } @Override public LocalOssProperty uploadProperty() { return this;//当前配置 } @Override public Class supplierService() { return LocalOssService.class;//绑定的上传实现Service } } ``` #### 2.加入供应商枚举 FileSupplierEnum > type : 供应商标识[不可重复] > > name : 供应商名称 > > clazz : 供应商配置类 即上方继承UploadBaseProperty的实体类 #### 3.加入供应商上传的实现类 继承 SupplierBaseService > init() : 用于初始化一些配置信息 > > uploading() : 流上传 > > delete() : 删除 ```java 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的容器中 ```java @Configuration public class FileBeanConfig { @Bean public LocalOssService localOssService(){ return new LocalOssService(); } } ``` ### 拓展上传的类型 #### 继承UploadBaseService 指定上传的 FileTypeEnum ```java public class ImgUploadService extends UploadBaseService { @Override protected FileTypeEnum fileType() { return FileTypeEnum.IMG; } } ``` #### FileTypeEnum说明 > type:类型 > > suffix:类型对应的后缀 > >比如拓展XML格式的上传 XML("xml",[".xml"]) ### 供应商配置说明 #### [七牛配置](help/QiNiu-Readme.md) #### [UFile配置](help/UFile-Readme.md) #### [阿里云配置](help/Aliyun-Readme.md) #### [腾讯云配置](help/TencentCloud-Readme.md) ### 测试效果 #### 文件格式 ![格式](img/使用说明/格式1.png) 修改ImgUploadService的fileType() 返回null ```java public class ImgUploadService extends UploadBaseService { @Override protected FileTypeEnum fileType() { return null; } } ``` ![格式](img/使用说明/格式2.png) #### 文件大小 ![格式](img/使用说明/大小1.png) 修改UploadConfigVo的最大上传量 ```java @Override public UploadConfigVo getUploadConfigVo() { UploadConfigVo uploadConfigVo = new UploadConfigVo(); uploadConfigVo.setMaxSize(50 * 1024L); //最大上传 uploadConfigVo.setRenTag(YesNoConstant.YES);//开启重命名 return uploadConfigVo; } ``` ![格式](img/使用说明/大小2.png) #### 重命名 开启则会在名称后面拼接UUID防止文件重名覆盖 ![格式](img/使用说明/重命名1.png) ![格式](img/使用说明/重命名2.png) > uploadConfigVo.setRenTag(YesNoConstant.NO);//关闭重命名 > > 注:关闭重命名可能导致文件名称相同 导致文件覆盖 ![格式](img/使用说明/重命名3.png) #### MD5 ![格式](img/使用说明/MD51.png) 模拟MD5比对成功 ```java @Override public String doCheckFileMd5(String nowFileMd5) { log.info("比对文件MD5信息: {}",nowFileMd5); return "E://模拟比对成功"; } ``` ![格式](img/使用说明/MD52.png) 关闭MD5上传校验 ```java @Override public boolean checkFileMd5() { return false; } ``` ![格式](img/使用说明/MD53.png) #### 删除 ![格式](img/使用说明/删除1.png) ![格式](img/使用说明/删除2.png) 删除到最后一个文件时候,会删除空文件夹 ![格式](img/使用说明/删除3.png) ### 未来计划 - 提供更多供应商的上传支持 ->阿里云/腾讯云.... - 各大供应商配置参数说明和如何获取该配置