sim-storage-client提供文件上传和下载功能,并集成了FTP、Minio以及本地存储,统一上传、下载接口,也支持自定义扩展存储方式。
源码地址:sim-storage-client
<dependency>
<groupId>com.yao2san</groupId>
<artifactId>sim-storage-client</artifactId>
<version>1.0.0</version>
</dependency>
<repositories>
<repository>
<id>rdc-releases</id>
<url>https://61c59941e74da01affdc9d7b:Swtu1HNF1phz@packages.aliyun.com/maven/repository/2170823-release-TpgdUY/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
sim:
storage:
enable: true
type: minio
minio:
endpoint: http://localhost
port: 9000
bucket: test
path: /upload/
access-key: U77bBCMYW1GVmow4
secret-key: tSiDkUNARZYhlARoUzT2STJlyYnezmG2
local:
path: "D:\\temp\\"
prefix: static
url: http://localhost:8080
ftp:
type: ftp
host: 127.0.0.1
port: 21
path: /data/
sim-storage-client支持以下存储类型:
类型 | 版本要求 | 说明 |
---|
本地存储(LOCAL) | 无 | 支持本地文件系统、NAS文件系统以及其它任意可挂载的文件系统。 | Minio存储(MINIO) | >8.3 | Minion是一个高性能的对象存储服务,集成了它的客户端。 | FTP存储(FTP) | 无 | 实现中。 |
3.5.2 上传和下载
@Autowired
private Uploader uploader;
@PostMapping("upload")
public void upload(MultipartFile file) throws IOException {
String object = file.getOriginalFilename();
UploadResult result = uploader.upload(file, object);
}
UploadArgs args = UploadArgs.builder().build();
args.add("user-id", "1");
UploadResult result = uploader.upload(file, object,args);
属性 | 类型 | 说明 |
---|
success | boolean | 上传成功/失败 | message | String | 上传失败时的失败原因 | object | String | 上传后的文件名(含路径,基于根路径) | isDir | boolean | 是否是目录 | size | long | 文件大小 | url | String | 文件访问/下载链接 | uploadArgs | UploadArgs | 上传时的参数 |
文件上传后,会发布一个UploadEvent 事件,您可以监听此事件做一些额外处理。
@Configuration
@Slf4j
public class UploadEventListener {
@EventListener
public void handler(UploadEvent event) {
log.info("Receive upload result event, time:{}, result:{}", event.getTimestamp(), JSONObject.toJSONString(event.getSource()));
}
}
sim-storage-client支持目录生成策略,内置3种策略:
(1) EmptyFolderPolicy :空策略,即不生成(默认)
(2) DayFolderPolicy :按天生成,每天一个目录,如20220922。
(3) MonthFolderPolicy :按月生成,每月一个目录,如202209。
您也可以自定义生成策略,只需要实现FolderPolicy 接口并将它放入Spring容器中即可:
public class CustomerFolderPolicy implements FolderPolicy {
@Override
public String create() {
return "";
}
}
@Bean
public FolderPolicy folderPolicy() {
return new CustomerFolderPolicy();
}
@Autowired
private Downloader downloader;
@GetMapping("download")
public void download(String fileName, HttpServletResponse response) throws IOException {
downloader.download(fileName, response.getOutputStream());
}
3.5.3 文件管理
StorageManager 提供了基础的文件管理功能,支持本地存储和Minio。
- 通过Spring容器获取
StorageManager
@Autowired
private StorageManager storageManager;
String prefix = "/images/";
storageManager.list(prefix);
String startAfter = "/images/test.png";
storageManager.list(prefix,startAfter);
String object= "/images/test.png";
storageManager.delete(object);
String object= "/images/test.png";
boolean exist = storageManager.exist(object)
String source= "/images/test.png";
String target = "/images/test2.png";
storageManager.rename(source,target);
String source= "/images/test.png";
String target = "/images/test2.png";
storageManager.copy(source,target);
|