API接口
MinIO Plus 提供了 StorageService 对象存储操作接口定义和实现。
StorageService 接口
提供文件上传、下载、删除等接口。
3.1.1 文件上传任务初始化
java
/**
* 上传任务初始化
* @param fileMd5 文件md5
* @param fullFileName 文件名(含扩展名)
* @param fileSize 文件长度
* @param isPrivate 是否私有 false:否 true:是
* @param userId 用户编号
* @return {@link FileCheckResultVo}
*/
FileCheckResultVo init(String fileMd5, String fullFileName, long fileSize, Boolean isPrivate, String userId);
上传完成
java
/**
* 合并已分块的文件
* @param fileKey 文件关键
* @param partMd5List 文件分块md5列表
* @param userId 用户编号
* @return {@link CompleteResultVo}
*/
CompleteResultVo complete(String fileKey, List<String> partMd5List,String userId);
取得文件下载地址
java
/**
* 取得文件下载地址
* @param fileKey 文件KEY
* @param userId 用户编号
* @return 文件下载地址
*/
String download(String fileKey, String userId);
3.1.4 取得原图地址
java
/**
* 取得原图地址
* @param fileKey 文件KEY
* @param userId 用户编号
* @return 原图地址
*/
String image(String fileKey, String userId);
取得缩略图地址
java
/**
* 取得缩略图地址
* @param fileKey 文件KEY
* @param userId 用户编号
* @return 缩略图地址
*/
String preview(String fileKey, String userId);
查询文件元数据
java
/**
* 查询元数据信息
* @param key 文件key
* @return 文件元数据信息
*/
FileMetadataInfoVo one(String key);
列表查询文件元数据
java
/**
* 查询元数据信息
* @param fileMetadataInfo 查询入参
* @return 文件元数据信息集合
*/
List<FileMetadataInfoVo> list(FileMetadataInfoDTO fileMetadataInfo);
从字节数组创建文件
java
/**
* 创建文件
* 尽量不要用本方法处理大文件,大文件建议使用前端直传
* @param fullFileName 文件名(含扩展名)
* @param isPrivate 是否私有 false:否 true:是
* @param userId 用户编号
* @param fileBytes 文件字节流
* @return 文件元数据信息
*/
FileMetadataInfoVo createFile(String fullFileName, Boolean isPrivate, String userId, byte[] fileBytes);
从输入流创建文件
java
/**
* 创建文件
* 尽量不要用本方法处理大文件,大文件建议使用前端直传
* @param fullFileName 文件名(含扩展名)
* @param isPrivate 是否私有 false:否 true:是
* @param userId 用户编号
* @param inputStream 文件输入字节流
* @return 文件元数据信息
*/
FileMetadataInfoVo createFile(String fullFileName, Boolean isPrivate, String userId, InputStream inputStream);
从外部url创建文件
java
/**
* 创建文件
* 尽量不要用本方法处理大文件,大文件建议使用前端直传
* @param fullFileName 文件名(含扩展名)
* @param isPrivate 是否私有 false:否 true:是
* @param userId 用户编号
* @param url 文件地址
* @return 文件元数据信息
*/
FileMetadataInfoVo createFile(String fullFileName, Boolean isPrivate, String userId, String url);
从输入流创建文件,支持大文件
java
/**
* 创建大文件
* 大文件建议使用本方法
* @param fullFileName 文件名(含扩展名)
* @param md5 文件名MD5
* @param fileSize 文件名大小
* @param isPrivate 是否私有 false:否 true:是
* @param userId 用户编号
* @param inputStream 文件输入字节流
* @return 文件元数据信息
*/
FileMetadataInfoVo createBigFile(String fullFileName, String md5, long fileSize,Boolean isPrivate, String userId, InputStream inputStream);
读取文件
java
/**
* 根据文件key读取文件字节流
* @param fileKey 文件key
* @return 文件字节流
*/
Pair<FileMetadataInfoVo,byte[]> read(String fileKey);
删除文件
java
/**
* 根据文件key删除文件
* @param fileKey 文件key
* @return 是否成功
*/
Boolean remove(String fileKey);
相关对象定义
java
/**
* 文件检查结果VO
*
* @author [email protected]
* @since 2023-06-26
**/
@Getter
@Setter
@ApiModel("文件检查结果")
public class FileCheckResultVo {
/**
* 主键
*/
@ApiModelProperty("主键")
private Long id;
/**
* 文件KEY
*/
@ApiModelProperty("文件KEY")
private String fileKey;
/**
* 文件md5
*/
@ApiModelProperty("文件md5")
private String fileMd5;
/**
* 文件名
*/
@ApiModelProperty("文件名")
private String fileName;
/**
* MIME类型
*/
@ApiModelProperty("MIME类型")
private String fileMimeType;
/**
* 文件后缀
*/
@ApiModelProperty("文件后缀")
private String fileSuffix;
/**
* 文件长度
*/
@ApiModelProperty("文件长度")
private Long fileSize;
/**
* 是否秒传
*/
@ApiModelProperty("是否秒传")
private Boolean isDone;
/**
* 分块数量
*/
@ApiModelProperty("分块数量")
private Integer partCount;
/**
* 分块大小
*/
@ApiModelProperty("分块大小")
private Integer partSize;
/**
* 分块信息
*/
@ApiModelProperty("分块信息")
private List<Part> partList = new ArrayList<>();
@Getter
@Setter
public static class Part {
/**
* minio的上传id
*/
@ApiModelProperty("minio的上传id")
private String uploadId;
/**
* 上传地址
*/
@ApiModelProperty("上传地址")
private String url;
/**
* 开始位置
*/
@ApiModelProperty("开始位置")
private Long startPosition;
/**
* 结束位置
*/
@ApiModelProperty("结束位置")
private Long endPosition;
}
}
java
/**
* 文件完整性校验结果VO
*
* @author [email protected]
* @since 2023-06-26
**/
@Getter
@Setter
@ApiModel("文件完整性校验结果")
public class CompleteResultVo {
@ApiModelProperty("是否完成")
private Boolean isComplete;
@ApiModelProperty("上传任务编号")
private String uploadTaskId;
@ApiModelProperty("补传的分块信息")
private List<FileCheckResultVo.Part> partList = new ArrayList<>();
}
java
/**
* 文件元数据信息VO
*
* @author [email protected]
* @since 2023-06-26
**/
@Getter
@Setter
@ApiModel("文件元数据信息")
public class FileMetadataInfoVo {
@ApiModelProperty("主键")
private Long id;
@ApiModelProperty("文件KEY")
private String fileKey;
@ApiModelProperty("文件md5")
private String fileMd5;
@ApiModelProperty("文件名")
private String fileName;
@ApiModelProperty("MIME类型")
private String fileMimeType;
@ApiModelProperty("文件后缀")
private String fileSuffix;
@ApiModelProperty("文件长度")
private Long fileSize;
@ApiModelProperty("存储引擎")
private String storageEngine;
@ApiModelProperty("存储桶")
private String storageBucket;
@ApiModelProperty("存储路径")
private String storagePath;
@ApiModelProperty("minio切片任务id")
private String uploadTaskId;
@ApiModelProperty("状态 0:未完成 1:已完成")
private Boolean isFinished;
@ApiModelProperty("是否分块 0:否 1:是")
private Boolean isPart;
@ApiModelProperty("分块数量")
private Integer partNumber;
@ApiModelProperty("预览图 0:无 1:有")
private Boolean isPreview;
@ApiModelProperty("是否私有 0:否 1:是")
private Boolean isPrivate;
@ApiModelProperty("创建人")
private String createUser;
@ApiModelProperty("创建时间")
private Date createTime;
@ApiModelProperty("修改人")
private String updateUser;
@ApiModelProperty("修改时间")
private Date updateTime;
}
Controller 层接口
如果是标准 Spring 项目,可以不写 Controller 层接口,minio-plus-extension 中提供了 Controller 层接口定义。
文件上传任务初始化
上传完成
文件下载
取得文件下载地址后,返回前端时进行302跳转。
图片预览 - 原图
取得原图地址后,返回前端时进行302跳转。
图片预览 - 缩略图
取得缩略图地址后,返回前端时进行302跳转。
引用 MinIO 接口
这里给出本项目引用的 MinIO 接口列表。