背景
本文先容Minio的搭建过程和利用方式,之后基于Minio给出一个Java利用案例。后续“基于Minio实现分片上传和断点续传”文章将以本文为基础。
1.Minio下载与安装
1.1 下载Minio
- #准备安装目录
- mkdir -p /home/seong/minio/
- cd /home/seong/minio/
- # 下载minio
- wget https://dl.minio.io/server/minio/release/linux-amd64/minio
- # 添加执行权限
- chmod +x minio
复制代码 也可以手动下载Minio资源: Minio中国镜像下载所在.
1.2 配置
创建data目录,用于后续上传的存放文件:
- mkdir -p /home/seong/minio/data
复制代码 创建配置文件minio.conf,配置用户名和密码、监听的端口:
- #/home/seong/minio/minio.conf
- MINIO_ROOT_USER="minioadmin"
- MINIO_ROOT_PASSWORD="minioadmin"
- MINIO_VOLUMES="/home/seong/minio/data/"
- MINIO_OPTS="--address 0.0.0.0:9002"
- MINIO_OPTS1="--console-address 0.0.0.0:39249"
复制代码 通过systemd管理minio服务,systemd相干知识请参考 inux系列-1 Linux启动流程——init与systemd进程.
在/etc/systemd/system目录下创建minio.service文件:
- #/etc/systemd/system/minio.service
- [Unit]
- Description=MinIO
- Wants=network-online.target
- After=network-online.target
- [Service]
- EnvironmentFile=/home/seong/minio/minio.conf
- ExecStart=/home/seong/minio/minio server $MINIO_OPTS $MINIO_VOLUMES
- Restart=always
- LimitNOFILE=65536
- [Install]
- WantedBy=multi-user.target
复制代码 重载service配置文件:
1.3 启动服务
通过systemd管理Minio后,通过service大概systemctl命令启停Minio:
- # 停止Minio
- service minio stop
- # 启动Minio
- service minio start
复制代码 1.4 docker方式安装
除通过软件包方式安装外,还可通过docker快速、便捷地安装Minio.
预备数据存储文件夹, 挂在到容器内部:
- mkdir -p /home/seong/minio/data
复制代码 通过docker启动Minia容器:
- # 下载镜像
- docker pull minio/minio
- # 启动容器
- docker run -d \
- --name minio \
- --restart=always \
- -p 9002:9002\
- -e "MINIO_ROOT_USER=minioadmin" \
- -e "MINIO_ROOT_PASSWORD=minioadmin" \
- -v /home/seong/minio/data/:/data \
- 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依赖
- <dependency>
- <groupId>io.minio</groupId>
- <artifactId>minio</artifactId>
- <version>3.0.10</version>
- </dependency>
复制代码 3.2.2 引入配置文件和配置类
借助SpringBoot框架的配置本领,通过配置类和配置文件解耦代码和Minio的毗连参数:
application.yml配置文件中添加如下配置:
添加配置类并注册到Spring容器中:
- @Data
- @Component
- @ConfigurationProperties(prefix = "minio")
- public class MinioProperties {
- private String url;
- private String accessKey;
- private String secretKey;
- }
复制代码 读取配置类,构造MinioClient对象, 并注册到Spring容器中:
- @Configuration
- public class MinioConfiguration {
- @Bean
- public MinioClient minioClient(MinioProperties minioProperties) {
- MinioClient minioClient = null;
- try {
- minioClient = new MinioClient(minioProperties.getUrl(), minioProperties.getAccessKey(), minioProperties.getSecretKey());
- } catch (Exception ignore) {
- }
- return minioClient;
- }
- }
复制代码 之后,可在必要利用Minio的地方,直接从IOC中获取MinioClient对象即可。
3.2.3 新增Http上传和下载接口
- @Slf4j
- @RestController
- @RequestMapping("/api")
- @CrossOrigin
- @RequiredArgsConstructor
- public class SoftwareFileController {
- private final MinioClient minioClient;
- private final static String BUCKET_SOFTWARE = "software";
- @PostMapping("/upload")
- public String upload(@RequestParam("uploadfile") MultipartFile file) throws Exception {
- String fileId = file.getOriginalFilename();
- minioClient.putObject(BUCKET_SOFTWARE, fileId, file.getInputStream(), file.getContentType());
- return fileId;
- }
- @GetMapping("/download")
- public ResponseEntity<Resource> download(@RequestParam("fileId") String fileId) throws Exception {
- InputStream inputStream = minioClient.getObject(BUCKET_SOFTWARE, fileId);
- Resource resource = new InputStreamResource(inputStream);
- HttpHeaders headers = new HttpHeaders();
- headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="" + fileId + """);
- return ResponseEntity.ok().headers(headers).body(resource);
- }
- }
复制代码 提供了新增和下载两个接口,这里将桶确定为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企服之家,中国第一个企服评测及商务社交产业平台。 |