//通过MinioUtil,直接getObjectURL获取url
String bucketName1 = MinioConfig.getBucketName();
String url = MinioConfig.getUrl();
String user = MinioConfig.getAccessKey();
String password = MinioConfig.getSecretKey();
// 初始化Minio客户端
MinioClient minioClient = MinioClient.builder()
.endpoint(url)
.credentials(user, password)
.build();
System.out.println(minioClient);
// BucketExistsArgs btest2 = BucketExistsArgs.builder().bucket("btest2").build();
try {
// boolean existFlag = minioClient.bucketExists(btest2);
// String bucketName = "btest3";
// // 存储桶不存在则创建
// if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
// minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
// System.out.printf("%s,创建成功\n", bucketName);
// }else{
// System.out.printf("%s,已存在\n", bucketName);
// }
// List<Bucket> bucketList = minioClient.listBuckets();
// bucketList.forEach(bucket -> {
// System.out.printf("存储桶名:%s,创建时间:%s \n", bucket.name(), bucket.creationDate());
// });
// String bucketName2 = "btest3";
// minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName2).build());
// String bucketName = "java.minio.demo";
// 创建InputStream上传
// File file = new File("D:\\redis.conf");
// InputStream inputStream = new FileInputStream(file);
// long start = System.currentTimeMillis();
// 上传流
// minioClient.putObject(
// PutObjectArgs.builder()
// .bucket(bucketName)
// .object("2021/11/28/" + file.getName()).stream(inputStream, inputStream.available(), -1)
// .build());
// inputStream.close();
// 上传文件
// minioClient.uploadObject(
// UploadObjectArgs.builder()
// .bucket(bucketName)
// .object("2021/11/28/2.png")
// .filename("D:\\2.png")
// .build());
// System.out.println("uploaded successfully 耗时:" + (System.currentTimeMillis() - start));
// GetObjectResponse 继承了 InputStream类
// GetObjectResponse objectResponse = minioClient.getObject(GetObjectArgs.builder()
// .bucket(bucketName)
// .object("2021/11/28/2.png")
// .build());
// System.out.println(objectResponse.bucket());
// System.out.println(objectResponse.object());
// int allBytes = objectResponse.read();//readAllBytes
// System.out.println(allBytes);
//
// // Close the input stream.
// objectResponse.close();
//
//
// minioClient.downloadObject(DownloadObjectArgs.builder()
// .bucket(bucketName)
// .object("2021/11/28/2.png")
// .filename("D:\\TempFiles\\2.png") // 必须指定文件名
// .build());
// String objectUrl = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
// .bucket(bucketName)
// .object("2021/11/28/2.png")
// .method(Method.GET)
// //.expiry(60) // 单位秒
// //.expiry(30, TimeUnit.SECONDS)
// .build());
// System.out.println(objectUrl);
// String objectName = "2021/11/28/2.png";
//
// // 1. 创建一个Post 策略
// // 为存储桶创建一个上传策略,过期时间为7天
// PostPolicy policy = new PostPolicy(bucketName, ZonedDateTime.now().plusDays(7));
// // 设置一个参数key-value,值为上传对象的名称(保存在桶中的名字)
// policy.addEqualsCondition("key", objectName);
// // 添加 Content-Type以"image/"开头,表示只能上传照片
// policy.addStartsWithCondition("Content-Type", "image/");
// // 设置上传文件的大小 10kiB to 10MiB.
// policy.addContentLengthRangeCondition(10 * 1024, 10 * 1024 * 1024);
//
// // 2. 获取策略的 认证令牌、签名等信息
// Map<String, String> formData = minioClient.getPresignedPostFormData(policy);
//
// // 3.模拟第三方,使用 OkHttp调用 Post上传对象
// // 创建 MultipartBody对象
// MultipartBody.Builder multipartBuilder = new MultipartBody.Builder();
// multipartBuilder.setType(MultipartBody.FORM);
// for (Map.Entry<String, String> entry : formData.entrySet()) {
// multipartBuilder.addFormDataPart(entry.getKey(), entry.getValue());
// }
// multipartBuilder.addFormDataPart("key", objectName);// 必须要和策略参数一样
// multipartBuilder.addFormDataPart("Content-Type", "image/png");
// File uploadFile = new File("D:\\TempFiles\\2.jpg");
// // 上传文件的 fileName自定义,这里方便就用 objectName
//
// final MediaType JSON = MediaType.get("image/png; charset=utf-8");
// okhttp3.RequestBody body = okhttp3.RequestBody.create(JSON, uploadFile);
// multipartBuilder.addFormDataPart(
// "file", objectName, body);
// // 使用OkHttp调用Post上传对象
// Request request =
// new Request.Builder()
// .url("http://192.168.1.20:9025/" + bucketName)
// .post(multipartBuilder.build())
// .build();
// OkHttpClient httpClient = new OkHttpClient().newBuilder().build();
// Response response = httpClient.newCall(request).execute();
// if (response.isSuccessful()) {
// System.out.println("uploaded successfully using POST object");
// } else {
// System.out.println("Failed to upload Pictures");
// }
// String bucketName = "java.minio.demo";
// String bucketName2 = "test";
// 将 bucketName中的100元2.jpg文件,复制到bucketName2桶下
// minioClient.copyObject(CopyObjectArgs.builder()
// .source(CopySource.builder()
// .bucket(bucketName)
// .object("2021/11/28/2.png")
// .build())
// .bucket(bucketName2)
// .object("2021/11/28/2.png")
// .build());
// String bucketName = "test";
//
// minioClient.removeObject(RemoveObjectArgs.builder()
// .bucket(bucketName)
// .object("2021/11/28/2.png")
// //.versionId("my-versionid") //还可以删除指定版本号的对象
// .build());
// String bucketName = "test";
//
// // 构建需要删除的对象
// List<DeleteObject> objects = new LinkedList<>();
// objects.add(new DeleteObject("2021/11/28/1.jpg"));
// objects.add(new DeleteObject("2021/11/28/2.jpg"));
// objects.add(new DeleteObject("2021/11/28/3.jpg"));
// // 删除
// Iterable<Result<DeleteError>> results = minioClient.removeObjects(RemoveObjectsArgs.builder()
// .bucket(bucketName)
// .objects(objects)
// .build());
// for (Result<DeleteError> result : results) {
// // 删除文件不存在时,不会报错
// DeleteError error = result.get();
// System.out.println("Error in deleting object " + error.objectName() + "; " + error.message());
// }
String bucketName2 = "test";
Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
.bucket(bucketName2)
.startAfter("2021")
.prefix("2") // 指定前缀
.maxKeys(100) // 最大数量
.recursive(true)
.build());
for (Result<Item> result : listObjects) {
Item item = result.get();
System.out.println(item.objectName() + "\t" + item.size() );
}
} catch (ErrorResponseException e) {
e.printStackTrace();
} catch (InsufficientDataException e) {
e.printStackTrace();
} catch (InternalException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (ServerException e) {
e.printStackTrace();
} catch (XmlParserException e) {
e.printStackTrace();
}