生成一个给HTTP GET请求用的presigned URL。浏览器/移动端的客户端可以用这个URL进行下载,即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间,默认值是7天。方法声明如下:
public String presignedGetObject(String bucketName, String objectName) public String presignedGetObject(String bucketName, String objectName, Integer expires)
其中:
bucketName:存储桶名称
objectName:存储桶里的对象名称
expiry:失效时间(以秒为单位),默认是7天,不得大于七天
实例:生成 files 存储桶下面 308608.jpg 图片对象的临时访问 URL 地址,默认该地址有效期为7天。使用该地址可以在浏览器中查看该图片对象,不用输入 accessKey 和 securetKey。代码如下:
package com.hxstrive.minio.demos.presigned;
import io.minio.MinioClient;
import io.minio.errors.MinioException;
/**
* 获取指定存储桶下对象的临时访问 URL 地址
* @author Administrator 2021/8/5 22:43
* @version 1.0
*/
public class PresignedGetObject {
/** MinioClient.presignedGetObject() example. */
public static void main(String[] args) throws Exception {
try {
MinioClient minioClient = new MinioClient(
"http://127.0.0.1:9000",
"root", "mypassword");
// 生成 files 存储桶下面 308608.jpg 图片对象的临时访问地址
// 默认该地址有效期为7天
String url = minioClient.presignedGetObject(
"files", "308608.jpg");
System.out.println(url);
// 生成 files 存储桶下面 308608.jpg 图片对象的临时访问地址
// 手动指定过期时间为 30 秒
String url2 = minioClient.presignedGetObject(
"files", "308608.jpg", 30);
System.out.println(url2);
} catch (MinioException e) {
e.printStackTrace();
}
}
}生成一个给HTTP PUT请求用的presigned URL。浏览器/移动端的客户端可以用这个URL进行上传,即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间,默认值是7天。方法声明如下:
public String presignedPutObject(String bucketName, String objectName) public String presignedPutObject(String bucketName, String objectName, Integer expires)
其中:
bucketName:存储桶名称
objectName:存储桶里的对象名称
expiry:失效时间(以秒为单位),默认是7天,不得大于七天
实例:获取一个 PUT 地址,然后使用 HttpComponent 库发起一个 PUT 请求,将一段文本保存到对象中;再次获取对象的 GET 地址,获取对象内容且输出到控制台。代码如下:
package com.hxstrive.minio.demos.presigned;
import io.minio.MinioClient;
import io.minio.errors.MinioException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import java.io.InputStream;
/**
* 生成一个给 HTTP PUT 请求用的 presigned URL
* @author Administrator 2021/8/5 22:50
* @version 1.0
*/
public class PresignedPutObject {
/** MinioClient.presignedPutObject() example. */
public static void main(String[] args) throws Exception {
try {
MinioClient minioClient = new MinioClient(
"http://127.0.0.1:9000",
"root", "mypassword");
// 获取指定存储桶下对象的 PUT URL 地址
String putUrl = minioClient.presignedPutObject(
"files", "myObject.txt");
System.out.println("put url = " + putUrl);
// 模拟一个 HTTP PUT 请求
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPut httpPut = new HttpPut(putUrl);
httpPut.setEntity(new StringEntity("Hello, World"));
CloseableHttpResponse responsePut = httpclient.execute(httpPut);
StatusLine statusLinePut = responsePut.getStatusLine();
System.out.println("status code = " + statusLinePut.getStatusCode());
System.out.println("reason phrase = " + statusLinePut.getReasonPhrase());
// 获取刚刚上传文件内容
String getUrl = minioClient.presignedGetObject(
"files", "myObject.txt");
System.out.println("get url = " + getUrl);
HttpGet httpGet = new HttpGet(getUrl);
CloseableHttpResponse responseGet = httpclient.execute(httpGet);
StatusLine statusLineGet = responseGet.getStatusLine();
System.out.println("status code = " + statusLineGet.getStatusCode());
System.out.println("reason phrase = " + statusLineGet.getReasonPhrase());
if(statusLineGet.getStatusCode() == HttpStatus.SC_OK) {
HttpEntity httpEntity = responseGet.getEntity();
InputStream inputStream = httpEntity.getContent();
byte[] bytes = new byte[(int)(httpEntity.getContentLength())];
inputStream.read(bytes);
inputStream.close();
System.out.println("content = " + new String(bytes));
}
} catch (MinioException e) {
e.printStackTrace();
}
}
}允许给POST请求的presigned URL设置策略,比如接收对象上传的存储桶名称的策略,key名称前缀,过期策略。方法声明如下:
public Map<String, String> presignedPostPolicy(PostPolicy policy)
其中:
policy:对象的post策略
实例:获取存储桶 files 中 myObject.txt 对象的策略信息,代码如下:
package com.hxstrive.minio.demos.presigned;
import io.minio.MinioClient;
import io.minio.PostPolicy;
import io.minio.errors.MinioException;
import java.time.ZonedDateTime;
import java.util.Map;
/**
* 给POST请求的presigned URL设置策略,比如接收对象上传的存储桶名称的策略,key名称前缀,过期策略
* @author Administrator 2021/8/6 8:50
* @version 1.0
*/
public class PresignedPostPolicy {
/** MinioClient.presignedGetObject() example. */
public static void main(String[] args) throws Exception {
try {
MinioClient minioClient = new MinioClient(
"http://127.0.0.1:9000",
"root", "mypassword");
// ZonedDateTime 需要JDK1.8+
ZonedDateTime expirationDate = ZonedDateTime.now();
PostPolicy postPolicy = new PostPolicy(
"files", "myObject.txt", expirationDate);
Map<String,String> map = minioClient.presignedPostPolicy(postPolicy);
for(Map.Entry<String,String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
} catch (MinioException e) {
e.printStackTrace();
}
}
}输出如下:
bucket = files x-amz-date = 20210806T042936Z x-amz-signature = 04dacf1fcb35e572634519a5383f370366185110350bc9bf5a66c54dcff1c0cd key = myObject.txt x-amz-algorithm = AWS4-HMAC-SHA256 x-amz-credential = root/20210806/zh-east-1/s3/aws4_request policy = eyJleHBpcmF0aW9uIjoiMjAyMS0wOC0wNlQwNDoyOTozNS4zODBaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkYnVja2V0IiwiZmlsZXMiXSxbImVxIiwiJGtleSIsIm15T2JqZWN0LnR4dCJdLFsiZXEiLCIkeC1hbXotYWxnb3JpdGhtIiwiQVdTNC1ITUFDLVNIQTI1NiJdLFsiZXEiLCIkeC1hbXotY3JlZGVudGlhbCIsInJvb3QvMjAyMTA4MDYvemgtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJdLFsiZXEiLCIkeC1hbXotZGF0ZSIsIjIwMjEwODA2VDA0MjkzNloiXV19