栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MinIO安装和基本使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MinIO安装和基本使用

文章目录
  • 1. 简介
  • 2. 安装(Docker)
  • 3. Java API
    • 3.1 准备工作
    • 3.2 文件上传
    • 3.3 文件下载

1. 简介

MinIO是一款高性能的对象存储容器,适合存储大量的非结构化数据,例如:图片、视频、Word等文件。此外,它还自带非常方便的可视化界面,简直是运维的最爱啊。

2. 安装(Docker)
  • 拉取镜像
docker pull minio/minio
  • 创建并运行容器
docker run -it --name minio -p 9000:9000 -p 9001:9001 -d 
-v /usr/local/docker/minio/data:/data 
-v /usr/local/docker/minio/config:/root/.minio 
-e 'MINIO_ROOT_USER=admin' 
-e 'MINIO_ROOT_PASSWORD=admin123' 
minio/minio server /data --console-address ":9001"
  • 查看容器日志,启动成功。账号:admin,密码:admin123:
  • 随后,在浏览器打开9000端口,分别输入上面的账号密码,登录即可
3. Java API 3.1 准备工作

这里以Java语言为例,框架以SpringBoot为例,调用Minio API进行相关操作

  • 首先,在上面的可视化界面点击左侧 Buckets 菜单,创建一个Bucket,命名为 test01
  • 然后,进入实例代码
  • 使用maven引用minio依赖
	
      io.minio
      minio
      8.3.0
      
        
          com.squareup.okhttp3
          okhttp
        
      
    

    
      com.squareup.okhttp3
      okhttp
      4.8.1
    
  • 建一个 MinioUtil 操作类,并实例化 MinioClient 对象
public class MinioUtil {

    private static MinioClient client;

    static {
        try {
            client = MinioClient.builder()
                    .endpoint(new URL("http://192.168.25.129:9000"))
                    .credentials("admin", "admin123")
                    .build();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}
3.2 文件上传
  • 在 MinioUtil 补充2个上传方法:上传本地文本、上传MultipartFile
    
    public static ObjectWriteResponse upload(String bucket, String localFileName, String remoteFileName) throws Exception{
        File file = new File(localFileName);
        FileInputStream fileInputStream = new FileInputStream(file);
        return client.putObject(PutObjectArgs.builder()
                .stream(fileInputStream, file.length(), PutObjectArgs.MIN_MULTIPART_SIZE)
                .object(remoteFileName)
                .bucket(bucket)
                .build());
    }

    
    public static ObjectWriteResponse upload(String bucket, MultipartFile file, String remoteFileName) throws Exception {
        return client.putObject(PutObjectArgs.builder()
                .bucket(bucket)
                .stream(file.getInputStream(), file.getSize(), PutObjectArgs.MIN_MULTIPART_SIZE)
                .object(remoteFileName)
                .build());
    }
  • 创建 MinioController ,加2个接口分别测试上传:
@RestController
@RequestMapping("/minio")
public class MinioController {

    
    @GetMapping("/uploadLocalFile")
    public String uploadLocalFile() throws Exception{
        ObjectWriteResponse resp = MinioUtil.upload("test01", "E:\测试文件.txt", getDatePath()+"test.txt");
        return "上传成功";
    }
    
    @PostMapping("/uploadMultipartFile")
    public String uploadMultipartFile(MultipartFile file) throws Exception {
        ObjectWriteResponse resp = MinioUtil.upload("test01", file, getDatePath() + file.getOriginalFilename());
        return "上传成功";
    }

    private String getDatePath(){
        LocalDateTime now = LocalDateTime.now();
        return String.format("/%s/%s/%s/", now.getYear(), now.getMonthValue(), now.getDayOfMonth());
    }
}
  • 执行完毕后,在 test01 这个 bucket 底下,会创建 /2021/09/27/ 的目录,并且将文件上传到该目录下

3.3 文件下载
  • 修改 MinioUtil,增加 2 个下载方法,分别是下载到本地和浏览器打开下载
    
    public static void downLocal(String bucket, String remoteFileName, String localFileName) throws Exception {
        client.downloadObject(DownloadObjectArgs.builder()
                .bucket(bucket)
                .object(remoteFileName)
                .filename(localFileName)
                .build());
    }
    
    
    public static void downResponse(String bucket, String remoteFileName, HttpServletResponse response) throws Exception {
        GetObjectResponse object = client.getObject(GetObjectArgs.builder()
                .bucket(bucket)
                .object(remoteFileName)
                .build());
        response.setHeader("Content-Disposition", "attachment;filename=" + remoteFileName.substring(remoteFileName.lastIndexOf("/")+1));
        response.setContentType("application/force-download");
        response.setCharacterEncoding("UTF-8");
        IOUtils.copy(object, response.getOutputStream());
    }
  • 修改 MinioController,增加2个对应的接口
    
    @PostMapping("/downLocal")
    public String downLocal() throws Exception {
        MinioUtil.downLocal("test01", "/2021/9/27/test.txt", "test.txt");
        return "下载成功";
    }
    
    
    @GetMapping("/downResponse")
    public void downResponse(HttpServletResponse response) throws Exception {
        MinioUtil.downResponse("test01", "/2021/9/27/test.txt", response);
    }

分别访问这2个接口就可以测试,这边就不演示了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270003.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号