Minio⽂件服务的基本⽤法
Minio的基本⽤法
MinIO 是⼀个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接⼝,⾮常适合于存储⼤容量⾮结构化的数据,例如图⽚、视频、⽇志⽂件、备份数据和容器/虚拟机镜像等,⽽⼀个对象⽂件可以是任意⼤⼩,从⼏kb到最⼤5T不等。
MinIO是⼀个⾮常轻量的服务,可以很简单的和其他应⽤的结合,类似 NodeJS, Redis 或者 MySQL。
~~~~感觉没⼈更新了,⽰例都停留在3.x版本,sdk已经有7+,所以⼀些API已经过时需要⾃⼰摸索。他们开了个新的,这个⽹站倒是没有⽤古⽼版本。
依赖包
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.0.2</version>
</dependency>
基本概念
存储桶可以简单理解为“根⽂件夹”,每个存储桶都是minio服务下的⼀个⼀级结点,其下可以有多个⼦⽂件夹。
对象在minio服务⾥每个存储内容都是⼀个对象。
启动minio服务
1. 下载⽂件
2. 启动服务的命令.\ server E:\temp ,后⾯跟着的路径表⽰⽂件上传后存储的位置。
启动完成后,会显⽰本地访问地址和⽤户名密码(上图中标红的部分)。
minio内建了⼀个简单的web服务,可以通过⽤户名和密码登录⽹页进⾏管理。
连接
使⽤kotlin代码连接minio服务:
private lateinit var mc: MinioClient
@BeforeEach
fun init(){
val endpoint ="127.0.0.1:9000"
val accessKeyID ="minioadmin"
val secretAccessKey ="minioadmin"
val useSSL =false
mc =MinioClient(endpoint, accessKeyID, secretAccessKey, useSSL) }
创建存储桶
@Test
exists的用法fun testCreateBucket(){
val bucketName ="test-bucket"
val has = mc.bucketExists(bucketName)
if(has){
println("$bucketName已经存在!")
}else{
mc.makeBucket(bucketName)
println("$bucketName不存在,已创建!")
}
}
配置访问策略
此步是可选的,只有对存储桶访问策略有特别要求时,才配置。默认是只允许“登录”后才能访问存储桶。
/**
* minio 使⽤的是aws权限-资源模型,规则很复杂,
* 参考docs.aws.amazon/AmazonS3/latest/dev/access-policy-language-overview.html      * 此⽅法将⽣成的权限是:可以匿名访问指定存储桶内的所有内容。
* 使⽤JSON字符串设定的访问策略在web管理端似乎看到不效果
*/
@Test
fun testAddPolicy(){
val bucketName ="test-bucket"
val p ="""
{
"Statement":[
{
"Action":[
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Effect":"Allow",
"Principal":"*",
"Resource":"arn:aws:s3:::$bucketName"
},
{
"Action":"s3:GetObject",
"Effect":"Allow",
"Principal":"*",
"Resource":"arn:aws:s3:::$bucketName/*"
}
],
"Version":"2012-10-17"
}
""".trimIndent()// Version 是不能随便改的。
println(p)
mc.setBucketPolicy(bucketName, p)
val policy = mc.getBucketPolicy(bucketName)
println(policy)
}
上传⽂件
/**
* 测试上传⽂件
* 重复上传会覆盖同名⽂件。
*/
@Test
fun testUploadFile(){
val bucketName ="test-bucket"
val domeFile =domeFile()
val fis =FileInputStream(domeFile)
val options =PutObjectOptions(
domeFile.length(),// or -1 , auto handle file size
PutObjectOptions.MIN_Long())
mc.putObject(bucketName,"", fis, options)
}
private fun domeFile(filename: String ="", context: String ="hello minio"): File {
val path = (ClassPathResource(filename).path)
return File().exists()){
}else{
}
}
下载⽂件
@Test
fun testGetFile(){
val bucketName ="test-bucket"
val fis = mc.getObject(bucketName,"")
val fos = (ClassPathResource("").path)
}
使⽤nginx代理minio服务
minio不像fastdfs内置了http组件(好像fastdfs新版本去掉了)可以直接对外提供服务,需要配合ngin之类的web服务器才能实现“静态⽂件”服务器的功能。
只有配置成minio的“公开桶”内的资源才能被代理供外部访问。
nginx配置
server{
listen 81;
server_name  localhost;
location / {
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_pass localhost:9000;
}
}
如上配置就可以访问minio公开桶内的资源。
编辑桶权限
前缀*表⽰当前存储桶下所有资源都可以被公开访问。
经过上述配置后,即可使⽤浏览器访问minio内部的⽂件了。
这便是访问minio的test-bucket 存储桶下a⽂件夹内的图⽚了。
当然,你也可以⽤代码来创建⼀个“公开桶”。
⼩案例:模拟⽤户上传头像
⽤户选择图⽚上传,在另⼀侧回显⽤户上传的图⽚。
⼤致效果如下:
代码⽐较简单,就不展开细说了。
完整代码:
案例是⽤kotlin写的,你要是看得不爽,可以顺着⽹线过来打我呀

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。