服务器情况搭建-6 Minio安装与利用先容
背景本文先容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相干知识请参考:Linux系列-1 Linux启动流程——init与systemd进程.
在/etc/systemd/system目录下创建minio.service文件:
#/etc/systemd/system/minio.service
Description=MinIO
Wants=network-online.target
After=network-online.target
EnvironmentFile=/home/seong/minio/minio.conf
ExecStart=/home/seong/minio/minio server $MINIO_OPTS$MINIO_VOLUMES
Restart=always
LimitNOFILE=65536
WantedBy=multi-user.target
重载service配置文件:
systemctl daemon-reload
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"
https://i-blog.csdnimg.cn/direct/29b45332a0f14179982c76681f27ba51.png
案例执行在一台长途呆板上,以是启动容器前必要通过service minio stop停止已安装的(软件包)Minio, 以克制9002端口辩论。
容器挂载卷与通过软件包安装的Minio存储数据的路径雷同,均为/home/seong/minio/data/,因此可以看到雷同的Buckets数据和文件数据。
2.Minio利用方式
2.1 创建Bucket
服务启动后,通过欣赏器访问http://服务器IP:9002所在:
https://i-blog.csdnimg.cn/direct/35acf81b8bee42b99e93a45ea9310430.pngMinio通过Buckets分类管理资源,可以通过Create Bucket自定义Buckets,这里创建三个Buckets分别用于存放图片、软件和其他数据:
https://i-blog.csdnimg.cn/direct/a83b67bfb75a4a75b7cff99face9c81d.png
2.2 上传和下载文件
在Object Browser菜单可以看到创建的3个Bucket:
https://i-blog.csdnimg.cn/direct/d90a8e0e6bca4f2f8a099ce1f61a32e2.png
点击software进入这个Bucket的详情页面,可以查询、上传、下载文件:
https://i-blog.csdnimg.cn/direct/f656334053624da6b53c73697107b6e2.png
3.Java利用Minio
3.1 预备密钥
Java利用MinioClient连结Minio必要经过鉴权,因此必要在Minio上创建一个密钥:
Access Keys菜单中新增一对Accesskey/SecretKey:
https://i-blog.csdnimg.cn/direct/49757b946fd74234860e3852830d8820.png
后续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配置文件中添加如下配置:
https://i-blog.csdnimg.cn/direct/d0043db8bf074f7a861a22cf8fe6a570.png
添加配置类并注册到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后点击开始上传按钮:
https://i-blog.csdnimg.cn/direct/5e0750bf30544938b3072ae583af6394.png
上传进度100%时,表现上传成功:
https://i-blog.csdnimg.cn/direct/27c29a936f624f90ab69b2b696df562e.png
查看Minio的software桶:
https://i-blog.csdnimg.cn/direct/a2edb176176f45f39d9830bf398a98bc.png
欣赏器访问: http://localhost:9003/api/download?fileId=Wireshark-4.2.6-x64.exe时可以下载Wireshark-4.2.6-x64.exe文件:
https://i-blog.csdnimg.cn/direct/eccbcffd99ca4c599bb31314b67551a6.png
下载接口的响应头中Content-Dispostion中携带了下载的文件名。
4.扩展
简朴了解Mino后,还必要了解Minio相干的API。之后,通过先容怎样通太过片上传和断点续传的方式办理大文件上传问题。由于此部分篇幅较大,在下一篇文章中再先容。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]