服务器情况搭建-6 Minio安装与利用先容

打印 上一主题 下一主题

主题 1937|帖子 1937|积分 5811

背景

本文先容Minio的搭建过程和利用方式,之后基于Minio给出一个Java利用案例。后续“基于Minio实现分片上传和断点续传”文章将以本文为基础。
1.Minio下载与安装

1.1 下载Minio

  1. #准备安装目录
  2. mkdir -p /home/seong/minio/
  3. cd /home/seong/minio/
  4. # 下载minio
  5. wget https://dl.minio.io/server/minio/release/linux-amd64/minio
  6. # 添加执行权限
  7. chmod +x minio
复制代码
也可以手动下载Minio资源: Minio中国镜像下载所在.
1.2 配置

创建data目录,用于后续上传的存放文件:
  1. mkdir -p /home/seong/minio/data
复制代码
创建配置文件minio.conf,配置用户名和密码、监听的端口:
  1. #/home/seong/minio/minio.conf
  2. MINIO_ROOT_USER="minioadmin"
  3. MINIO_ROOT_PASSWORD="minioadmin"
  4. MINIO_VOLUMES="/home/seong/minio/data/"
  5. MINIO_OPTS="--address 0.0.0.0:9002"
  6. MINIO_OPTS1="--console-address 0.0.0.0:39249"
复制代码
通过systemd管理minio服务,systemd相干知识请参考inux系列-1 Linux启动流程——init与systemd进程.
在/etc/systemd/system目录下创建minio.service文件:
  1. #/etc/systemd/system/minio.service
  2. [Unit]
  3. Description=MinIO
  4. Wants=network-online.target
  5. After=network-online.target
  6. [Service]
  7. EnvironmentFile=/home/seong/minio/minio.conf
  8. ExecStart=/home/seong/minio/minio server $MINIO_OPTS  $MINIO_VOLUMES
  9. Restart=always
  10. LimitNOFILE=65536
  11. [Install]
  12. WantedBy=multi-user.target
复制代码
重载service配置文件:
  1. systemctl daemon-reload
复制代码
1.3 启动服务

通过systemd管理Minio后,通过service大概systemctl命令启停Minio:
  1. # 停止Minio
  2. service minio stop
  3. # 启动Minio
  4. service minio start
复制代码
1.4 docker方式安装

除通过软件包方式安装外,还可通过docker快速、便捷地安装Minio.
预备数据存储文件夹, 挂在到容器内部:
  1. mkdir -p /home/seong/minio/data
复制代码
通过docker启动Minia容器:
  1. # 下载镜像
  2. docker pull minio/minio
  3. # 启动容器
  4. docker run -d \
  5.   --name minio \
  6.   --restart=always \
  7.   -p 9002:9002\
  8.   -e "MINIO_ROOT_USER=minioadmin" \
  9.   -e "MINIO_ROOT_PASSWORD=minioadmin" \
  10.   -v /home/seong/minio/data/:/data \
  11.   minio/minio:latest server /data --console-address ":9002"
复制代码

案例执行在一台长途呆板上,以是启动容器前必要通过service minio stop停止已安装的(软件包)Minio, 以克制9002端口辩论。
容器挂载卷与通过软件包安装的Minio存储数据的路径雷同,均为/home/seong/minio/data/,因此可以看到雷同的Buckets数据和文件数据。
2.Minio利用方式

2.1 创建Bucket

服务启动后,通过欣赏器访问http://服务器IP:9002所在:
Minio通过Buckets分类管理资源,可以通过Create Bucket自定义Buckets,这里创建三个Buckets分别用于存放图片、软件和其他数据:

2.2 上传和下载文件

在Object Browser菜单可以看到创建的3个Bucket:

点击software进入这个Bucket的详情页面,可以查询、上传、下载文件:

3.Java利用Minio

3.1 预备密钥

Java利用MinioClient连结Minio必要经过鉴权,因此必要在Minio上创建一个密钥:
Access Keys菜单中新增一对Accesskey/SecretKey:

后续MinioClient连结Minio时必要用到Accesskey/SecretKey。
3.2 代码实现

3.2.1 引入pom依赖

  1. <dependency>
  2.     <groupId>io.minio</groupId>
  3.     <artifactId>minio</artifactId>
  4.     <version>3.0.10</version>
  5. </dependency>
复制代码
3.2.2 引入配置文件和配置类

借助SpringBoot框架的配置本领,通过配置类和配置文件解耦代码和Minio的毗连参数:
application.yml配置文件中添加如下配置:

添加配置类并注册到Spring容器中:
  1. @Data
  2. @Component
  3. @ConfigurationProperties(prefix = "minio")
  4. public class MinioProperties {
  5.     private String url;
  6.     private String accessKey;
  7.     private String secretKey;
  8. }
复制代码
读取配置类,构造MinioClient对象, 并注册到Spring容器中:
  1. @Configuration
  2. public class MinioConfiguration {
  3.     @Bean
  4.     public MinioClient minioClient(MinioProperties minioProperties) {
  5.         MinioClient minioClient = null;
  6.         try {
  7.             minioClient = new MinioClient(minioProperties.getUrl(), minioProperties.getAccessKey(), minioProperties.getSecretKey());
  8.         } catch (Exception ignore) {
  9.         }
  10.         return minioClient;
  11.     }
  12. }
复制代码
之后,可在必要利用Minio的地方,直接从IOC中获取MinioClient对象即可。
3.2.3 新增Http上传和下载接口

  1. @Slf4j
  2. @RestController
  3. @RequestMapping("/api")
  4. @CrossOrigin
  5. @RequiredArgsConstructor
  6. public class SoftwareFileController {
  7.     private final MinioClient minioClient;
  8.     private final static String BUCKET_SOFTWARE = "software";
  9.     @PostMapping("/upload")
  10.     public String upload(@RequestParam("uploadfile") MultipartFile file) throws Exception {
  11.         String fileId = file.getOriginalFilename();
  12.         minioClient.putObject(BUCKET_SOFTWARE, fileId, file.getInputStream(), file.getContentType());
  13.         return fileId;
  14.     }
  15.     @GetMapping("/download")
  16.     public ResponseEntity<Resource> download(@RequestParam("fileId") String fileId) throws Exception {
  17.         InputStream inputStream = minioClient.getObject(BUCKET_SOFTWARE, fileId);
  18.         Resource resource = new InputStreamResource(inputStream);
  19.         HttpHeaders headers = new HttpHeaders();
  20.         headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="" + fileId + """);
  21.         return ResponseEntity.ok().headers(headers).body(resource);
  22.     }
  23. }
复制代码
提供了新增和下载两个接口,这里将桶确定为software,分别利用minioClient的putObject和getObject上传和下载对象。
3.2.4 前端实现

   前端简朴的上传页面,不是本文关心的内容,略
  案例前端的代码实如今 https://gitee.com/EwenSeong/LocalFileSystem.git
3.3 案例演示

在本地选择wireshark后点击开始上传按钮:

上传进度100%时,表现上传成功:

查看Minio的software桶:

欣赏器访问: http://localhost:9003/api/download?fileId=Wireshark-4.2.6-x64.exe时可以下载Wireshark-4.2.6-x64.exe文件:

下载接口的响应头中Content-Dispostion中携带了下载的文件名。
4.扩展

简朴了解Mino后,还必要了解Minio相干的API。之后,通过先容怎样通太过片上传和断点续传的方式办理大文件上传问题。由于此部分篇幅较大,在下一篇文章中再先容。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表