本文最后更新于:2024-11-18T14:20:10+08:00
搭建minio服务器
这个我在另一篇中有说明,这里不再赘述。
导入相关依赖
必要的配置
然后就可以用MinioClient
这个类来操作Minio了,下面附上API文档,Copy过来的,不是原创!!!
Java Client API参考文档
初始化Minio Client object。
MinIO
AWS S3
1. 构造函数
|
public MinioClient(String endpoint) throws NullPointerException, InvalidEndpointException, InvalidPortException |
使用给定的endpoint以及匿名方式创建一个Minio client对象。 |
查看 Javadoc |
|
public MinioClient(URL url) throws NullPointerException, InvalidEndpointException, InvalidPortException |
使用给定的url以及匿名方式创建一个Minio client对象。 |
查看 Javadoc |
|
public MinioClient(com.squareup.okhttp.HttpUrl url) throws NullPointerException, InvalidEndpointException, InvalidPortException |
使用给定的HttpUrl以及匿名方式创建一个Minio client对象。 |
查看 Javadoc |
|
public MinioClient(String endpoint, String accessKey, String secretKey) throws NullPointerException, InvalidEndpointException, InvalidPortException |
使用给定的endpoint、access key和secret key创建一个Minio client对象。 |
查看 Javadoc |
|
public MinioClient(String endpoint, int port, String accessKey, String secretKey) throws NullPointerException, InvalidEndpointException, InvalidPortException |
使用给定的endpoint、port、access key和secret key创建一个Minio client对象。 |
查看 Javadoc |
|
public MinioClient(String endpoint, String accessKey, String secretKey, boolean secure) throws NullPointerException, InvalidEndpointException, InvalidPortException |
使用给定的endpoint、access key、secret key和一个secure选项(是否使用https)创建一个Minio client对象。 |
查看 Javadoc |
|
public MinioClient(String endpoint, int port, String accessKey, String secretKey, boolean secure) throws NullPointerException, InvalidEndpointException, InvalidPortException |
使用给定的endpoint、port、access key、secret key和一个secure选项(是否使用https)创建一个Minio client对象。 |
查看 Javadoc |
|
public MinioClient(com.squareup.okhttp.HttpUrl url, String accessKey, String secretKey) throws NullPointerException, InvalidEndpointException, InvalidPortException |
使用给定的HttpUrl对象、access key、secret key创建一个Minio client对象。 |
查看 Javadoc |
|
public MinioClient(URL url, String accessKey, String secretKey) throws NullPointerException, InvalidEndpointException, InvalidPortException |
使用给定的URL对象、access key、secret key创建一个Minio client对象。 |
查看 Javadoc |
参数
参数 |
类型 |
描述 |
endpoint |
string |
endPoint是一个URL,域名,IPv4或者IPv6地址。以下是合法的endpoints: |
|
|
https://s3.amazonaws.com |
|
|
https://play.min.io |
|
|
localhost |
|
|
play.min.io |
port |
int |
TCP/IP端口号。可选,默认值是,如果是http,则默认80端口,如果是https,则默认是443端口。 |
accessKey |
string |
accessKey类似于用户ID,用于唯一标识你的账户。 |
secretKey |
string |
secretKey是你账户的密码。 |
secure |
boolean |
如果是true,则用的是https而不是http,默认值是true。 |
url |
URL |
Endpoint URL对象。 |
url |
HttpURL |
Endpoint HttpUrl对象。 |
示例
MinIO
AWS S3
2. 存储桶操作
makeBucket(String bucketName)
创建一个新的存储桶
查看Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称 |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 非法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常 |
|
ErrorResponseException : 执行失败 |
|
InternalException : 内部异常 |
示例
listBuckets()
列出所有存储桶。
查看Javadoc
返回值类型 |
异常 |
List Bucket : List of bucket type. |
异常列表: |
|
NoResponseException : 服务端无响应 |
|
IOException : 连接异常 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常 |
|
ErrorResponseException :执行失败异溃 |
|
InternalException : 内部错误 |
示例
bucketExists(String bucketName)
检查存储桶是否存在。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称 |
返回值值类型 |
异常 |
boolean : true if the bucket exists |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
示例
removeBucket(String bucketName)
删除一个存储桶。
查看 Javadoc
注意: - removeBucket不会删除存储桶里的对象,你需要通过removeObject API来删除它们。
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
示例
listObjects(String bucketName, String prefix, boolean recursive, boolean useVersion1)
列出某个存储桶中的所有对象。
查看Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
prefix |
String |
对象名称的前缀 |
recursive |
boolean |
是否递归查找,如果是false,就模拟文件夹结构查找。 |
useVersion1 |
boolean |
如果是true, 使用版本1 REST API |
返回值类型 |
异常 |
Iterable<Result<Item>> :an iterator of Result Items. |
None |
示例
listIncompleteUploads(String bucketName, String prefix, boolean recursive)
列出存储桶中被部分上传的对象。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
prefix |
String |
对象名称的前缀,列出有该前缀的对象 |
recursive |
boolean |
是否递归查找,如果是false,就模拟文件夹结构查找。 |
返回值类型 |
异常 |
Iterable<Result<Upload>> : an iterator of Upload. |
None |
示例
getBucketPolicy(String bucketName, String objectPrefix)
获得指定对象前缀的存储桶策略。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectPrefix |
String |
策略适用的对象的前缀 |
返回值类型 |
异常 |
PolicyType : The current bucket policy type for a given bucket and objectPrefix. |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
InvalidObjectPrefixException : 不合法的对象前缀 |
|
NoSuchAlgorithmException : 找不到相应的签名算法。 |
|
InsufficientDataException : 在读到相应length之前就得到一个EOFException。 |
示例
setBucketPolicy(String bucketName, String objectPrefix, PolicyType policy)
给一个存储桶+对象前缀设置策略。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectPrefix |
String |
对象前缀。 |
policy |
PolicyType |
要赋予的策略,可选值有[PolicyType.NONE, PolicyType.READ_ONLY, PolicyType.READ_WRITE, PolicyType.WRITE_ONLY]. |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
InvalidObjectPrefixException : 不合法的对象前缀 |
|
NoSuchAlgorithmException : 找不到相应的签名算法。 |
|
InsufficientDataException : 在读到相应length之前就得到一个EOFException。 |
示例
3. Object operations
getObject(String bucketName, String objectName)
以流的形式下载一个对象。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
返回值类型 |
异常 |
InputStream : InputStream containing the object data. |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
示例
getObject(String bucketName, String objectName, long offset, Long length)
下载对象指定区域的字节数组做为流。(断点下载)
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
offset |
Long |
offset 是起始字节的位置 |
length |
Long |
length 是要读取的长度 (可选,如果无值则代表读到文件结尾)。 |
返回值类型 |
异常 |
InputStream : InputStream containing the object’s data. |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
示例
getObject(String bucketName, String objectName, String fileName)
下载并将文件保存到本地。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
fileName |
String |
File name. |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
示例
getObject(String bucketName, String objectName, SecretKey key)
在给定的存储桶中获取整个加密对象的数据作为InputStream,然后用传入的master key解密和加密对象关联的content key。然后创建一个含有InputStream和Cipher的CipherInputStream。这个Cipher被初始为用于使用content key进行解密,所以CipherInputStream会在返回数据前,尝试读取数据并进行解密。所以read()方法返回的是处理过的原始对象数据。
CipherInputStream必须用完关闭,否则连接不会被释放。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
key |
SecretKey |
SecretKey类型的数据。 |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
|
InvalidEncryptionMetadataException : 加密秘钥错误。 |
|
BadPaddingException : 错误的padding |
|
IllegalBlockSizeException : 不正确的block size |
|
NoSuchPaddingException : 错误的pading类型 |
|
InvalidAlgorithmParameterException : 该算法不存在 |
示例
getObject(String bucketName, String objectName, KeyPair key)
在给定的存储桶中获取整个加密对象的数据作为InputStream,然后用传入的master keyPair解密和加密对象关联的content key。然后创建一个含有InputStream和Cipher的CipherInputStream。这个Cipher被初始为用于使用content key进行解密,所以CipherInputStream会在返回数据前,尝试读取数据并进行解密。所以read()方法返回的是处理过的原始对象数据。
CipherInputStream必须用完关闭,否则连接不会被释放。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
key |
KeyPair |
RSA KeyPair类型的对象。 |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
|
InvalidEncryptionMetadataException : 加密秘钥错误。 |
|
BadPaddingException : 错误的padding |
|
IllegalBlockSizeException : 不正确的block size |
|
NoSuchPaddingException : 错误的pading类型 |
|
InvalidAlgorithmParameterException : 该算法不存在 |
示例
putObject(String bucketName, String objectName, InputStream stream, long size, String contentType)
通过InputStream上传对象。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
stream |
InputStream |
要上传的流。 |
size |
long |
要上传的stream 的size |
contentType |
String |
Content type。 |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
示例
单个对象的最大大小限制在5TB。putObject在对象大于5MiB时,自动使用multiple parts方式上传。这样,当上传失败时,客户端只需要上传未成功的部分即可(类似断点上传)。上传的对象使用MD5SUM签名进行完整性验证。
putObject(String bucketName, String objectName, String fileName)
通过文件上传到对象中。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
fileName |
String |
File name. |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
示例
putObject(String bucketName, String objectName, InputStream stream, long size, String contentType, SecretKey key)
拿到流的数据,使用随机生成的content key进行加密,并上传到指定存储桶中。同时将加密后的content key和iv做为加密对象有header也上传到存储桶中。content key使用传入到该方法的master key进行加密。
如果对象大于5MB,客户端会自动进行multi part上传。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
stream |
InputStream |
要上传的流。 |
size |
long |
要上传的流的大小。 |
contentType |
String |
Content type。 |
key |
SecretKey |
用AES初使化的对象SecretKey。 |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
|
InvalidAlgorithmParameterException : 错误的加密算法。 |
|
BadPaddingException : 不正确的padding. |
|
IllegalBlockSizeException : 不正确的block。 |
|
NoSuchPaddingException : 错误的padding类型。 |
示例
对象使用随机生成的key进行加密,然后这个用于加密数据的key又被由仅被client知道的master key(封装在encryptionMaterials对象里)进行加密。这个被加密后的key和IV做为对象的header和加密后的对象一起被上传到存储服务上。
putObject(String bucketName, String objectName, InputStream stream, long size, String contentType, KeyPair key)
拿到流的数据,使用随机生成的content key进行加密,并上传到指定存储桶中。同时将加密后的content key和iv做为加密对象有header也上传到存储桶中。content key使用传入到该方法的master key进行加密。
如果对象大于5MB,客户端会自动进行multi part上传。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
stream |
InputStream |
要上传的流。 |
size |
long |
要上传的流的大小。 |
contentType |
String |
Content type。 |
key |
KeyPair |
一个RSA KeyPair的对象。 |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
|
InvalidAlgorithmParameterException : 错误的加密算法。 |
|
BadPaddingException : 不正确的padding。 |
|
IllegalBlockSizeException : 不正确的block。 |
|
NoSuchPaddingException : 错误的pading类型。 |
示例
对象使用随机生成的key进行加密,然后这个用于加密数据的key又被由仅被client知道的master key(封装在encryptionMaterials对象里)进行加密。这个被加密后的key和IV做为对象的header和加密后的对象一起被上传到存储服务上。
statObject(String bucketName, String objectName)
public ObjectStat statObject(String bucketName, String objectName)
获取对象的元数据。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
返回值类型 |
异常 |
ObjectStat : Populated object meta data. |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
示例
public void copyObject(String bucketName, String objectName, String destBucketName, String destObjectName, CopyConditions cpConds, Map<String, String> metadata)
从objectName指定的对象中将数据拷贝到destObjectName指定的对象。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
源存储桶名称。 |
objectName |
String |
源存储桶中的源对象名称。 |
destBucketName |
String |
目标存储桶名称。 |
destObjectName |
String |
要创建的目标对象名称,如果为空,默认为源对象名称。 |
copyConditions |
CopyConditions |
拷贝操作的一些条件Map。 |
metadata |
Map |
给目标对象的元数据Map。 |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
示例
本API执行了一个服务端的拷贝操作。
removeObject(String bucketName, String objectName)
删除一个对象。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
示例
removeObject(String bucketName, Iterable objectNames)
删除多个对象。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectNames |
Iterable |
含有要删除的多个object名称的迭代器对象。 |
返回值类型 |
异常 |
Iterable<Result<DeleteError>> :an iterator of Result DeleteError. |
None |
示例
removeIncompleteUpload(String bucketName, String objectName)
删除一个未完整上传的对象。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
返回值类型 |
异常 |
None |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
NoResponseException : 服务器无响应。 |
|
IOException : 连接异常。 |
|
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。 |
|
ErrorResponseException : 执行失败异常。 |
|
InternalException : 内部错误。 |
示例
4. Presigned操作
presignedGetObject(String bucketName, String objectName, Integer expires)
生成一个给HTTP GET请求用的presigned URL。浏览器/移动端的客户端可以用这个URL进行下载,即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间,默认值是7天。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
expiry |
Integer |
失效时间(以秒为单位),默认是7天,不得大于七天。 |
返回值类型 |
异常 |
String : string contains URL to download the object. |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
InvalidKeyException : 不合法的access key或者secret key。 |
|
IOException : 连接异常。 |
|
NoSuchAlgorithmException : 找不到相应的签名算法。 |
|
InvalidExpiresRangeException : presigned URL已经过期了。 |
示例
presignedPutObject(String bucketName, String objectName, Integer expires)
生成一个给HTTP PUT请求用的presigned URL。浏览器/移动端的客户端可以用这个URL进行上传,即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间,默认值是7天。
查看 Javadoc
参数
参数 |
类型 |
描述 |
bucketName |
String |
存储桶名称。 |
objectName |
String |
存储桶里的对象名称。 |
expiry |
Integer |
失效时间(以秒为单位),默认是7天,不得大于七天。 |
返回值类型 |
异常 |
String : string contains URL to download the object. |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
InvalidKeyException : 不合法的access key或者secret key。 |
|
IOException : 连接异常。 |
|
NoSuchAlgorithmException : 找不到相应的签名算法。 |
|
InvalidExpiresRangeException : presigned URL已经过期了。 |
示例
presignedPostPolicy(PostPolicy policy)
允许给POST请求的presigned URL设置策略,比如接收对象上传的存储桶名称的策略,key名称前缀,过期策略。
查看 Javadoc
参数
参数 |
类型 |
描述 |
policy |
PostPolicy |
对象的post策略 |
返回值类型 |
异常 |
Map : Map of strings to construct form-data. |
异常列表: |
|
InvalidBucketNameException : 不合法的存储桶名称。 |
|
InvalidKeyException : 不合法的access key或者secret key。 |
|
IOException : 连接异常。 |
|
NoSuchAlgorithmException : 找不到相应的签名算法。 |
示例
5. 了解更多