MinIO简介和java Api的使用

本文出自jvm123.com-java技术分享站:http://jvm123.com/2020/02/minio-jian-jie-java-api.html

MinIO是一个对象存储服务,非常轻量,也提供了多种语言的api,可以非常方便使用。

存储桶

minio中的bucket桶

MinIO将存储空间分为多个部分,称为bucket桶,文件(对象)就存储在各个bucket桶中

桶策略

这些bucket桶可以根据用户的需要进行创建和删除。此外可以对每个bucket桶设置匿名用户访问的策略,具体策略说明如下:

  • ReadOnly – 允许匿名下载访问包括能够列出所需前缀的对象
  • WriteOnly – 允许匿名上传包括能够列出所需前缀的不完整上传
  • 读写 – 匿名访问以上载和下载所有对象
  • 无 – 是默认值(无策略),这意味着所有操作都需要针对所需的存储桶和前缀进行身份验证

Java Api

依赖:

<dependency>
    <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>3.0.10</version> </dependency>

java api 通过一个http客户端进行存储和获取对象文件,所以java代码中可以通过以下的步骤进行存储和获取:

1 实例化一个MinioClient客户端:

MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);

2 创建存储桶bucket:

            String bucket = "demo-bucket"; boolean isExist = minioClient.bucketExists(bucket); if(isExist) { LOGGER.info("Bucket {} already exists.", bucket); } else { minioClient.makeBucket(bucket); }

3 存储文件对象(需要指定存储的桶):

minioClient.putObject(bucket, destFileName, file.getAbsolutePath());

因为MinioClient使用http客户端,并不是长连接,所以不需要进行关闭连接和释放资源的操作。

扫描二维码关注公众号,回复: 11318778 查看本文章

至此,文件已经存储完毕,可以在Minio服务器查询看到,bucket中的文件

4 获取对象文件如下(获取输入流InputStream):


    public InputStream getStream(String bucket, String fileName) { InputStream is = null; try { MinioClient minioClient = ...; // 再实例化一个客户端 is = minioClient.getObject(bucket, fileName); } catch(MinioException | NoSuchAlgorithmException | IOException | XmlPullParserException | InvalidKeyException e) { LOGGER.error("error: {}", e.getMessage()); } return is; }

如果需要获取File对象:

    public File getFile(String bucket, String fileName) { InputStream is = getStream(bucket, fileName); File dir = new File(tmpDir); if (!dir.exists() || dir.isFile()) { dir.mkdirs(); } File file = new File(tmpDir + fileName); try { FileUtils.copyToFile(is, file); } catch (IOException e) { e.printStackTrace(); } return file; }

如果需要下载文件,可以直接将输入流写入servlet输出流即可:

public void writeTo(String bucket, String fileName, OutputStream os) throws IOException { InputStream is = getStream(bucket, fileName); byte[] bytes = new byte[1024]; int len; while ((len = is.read(bytes)) != -1) { os.write(bytes, 0, len); } os.flush(); }

 

猜你喜欢

转载自www.cnblogs.com/tangzeqi/p/13163461.html
今日推荐