Minio文件存储快速入门

内容来源:尚硅谷Java项目【尚庭公寓】从0开始Java项目实战_哔哩哔哩_bilibili 

是里面的Minio章节的内容总结


安装客户端遇到的错误

 

我们把配置粘贴到配置文件的时候,我们注意要切换到输入者模式

如果我们不切换到输入者模式的话,它会把这个unit里面的这个i当成我们的转变模式输入的i

导致我们粘贴的东西不完全

这个是让我们的minio重新加载的指令


Java客户端

步骤

弄一个存储桶

设置我们的桶的访问权限

上传文件


引入依赖,编写yml文件

<dependency>

<groupId>io.minio</groupId>

<artifactId>minio</artifactId>

<version>8.5.3</version>

</dependency>


minio:

endpoint: http://<hostname>:<port>

access-key: <access-key>

secret-key: <secret-key>

bucket-name: <bucket-name>


MutipartFile上传文件类型

我们这样子上传给我们的minio之后,我们minio会把这个图片的url返回给我们


编写配置类(注入到SpringIOC容器)

我们用构造器模式

之前是在类当中声明了几个变量

这样子写死是不合理的

我们的不同的环境声明的变量不同

根据自己的环境信息写入配置文件

配置文件注入变量

方法一(Value注解)

用Value注解进行注入

方法二(创建类)

我们创建一个类,方便进行我们的集中管理

专门写一个类放我们的变量

ConfigurationProteries注解

prefix对应我们的配置文件里面的minio

驼峰映射

-中划线

_下划线

后面的那个字母要大写


EnableConfigurationProperties注解

里面指定刚刚我们写的 变量类

或者使用

ConfigurationPropertiesScan

扫描 XXX包下的所有的ConfigurationProperties

这样子就可以使用多个 配置的变量类


编写Controller,实现简单的文件上传

文件类,MutipartFile

基本方法

我们来看看里面的方法

getSize()得到我们的上传文件的大小

我们可以这样子来判断文件大小有没有超过我们的限制

getByte()秒读

以字节数组的形式来返回这个文件的内容

getInputStream() 分片读

通过输入流,可以逐个字节去读取我们的前端上传的文件

getName()和getFieldName()的区别


开始编写我们的Service层

创建桶对象

使用构造器模式

bucketExists BucketExistsArgs

判断桶是否存在

makeBucket MakeBucketArgs

创建我们的桶对象


编写桶对象的访问权限

setBucketPolicy SetBucketPolicyArgs

bucket()

写我们的桶名称

config()

传的参数是Json字符串,用来编写我们的配置权限

解释权限字符串

我们把这个配置权限的JSON字符串封装到了一个方法里

这个配置就是 允许所有人去读取这个桶下面的所有资源

/ %s是一个占位符,我们用bucktName给它替换掉 /*代表桶下面的所有资源

//这个配置就是 允许所有人去读取这个桶下面的所有资源
//arn:aws:s3:::
Action

是操作的意思 GetObject是获取或者读取

Effect

是效果的意思 后面的Allow是允许

Principal

代表用户 *表示所有人

Resource

代表资源

前面 arn:aws:s3::: 是我们的固定写法我们不用看,我们看看后面 %s/*

%s是一个占位符,我们用bucktName给它替换掉 /*代表桶下面的所有资源


上传文件

这个方法是上传本地文件,我们不使用这个

我们使用这个方法

这个方法是将流的数据,上传到我们的mino对象中

bucket()

是我们的要上传给的桶的名字

object()

是指定我们的对象的名称

这个数据发送到minio上的时候 这个对象或者文件名叫啥

stream()

因为我们要把流的数据发送给minio

所以我们要指定一个inputstream

stream方法的3个参数

objectSize

是我们要上传的对象的总大小

partSize

是我们的每一个分块的大小

分片传输

minio传输的时候,是会进行分片传输的

会将这个文件分成若干个块,然后逐个进行传输

我们的partsize填-1就好了,

在size已知的情况下我们写-1,它会自动去计算我们的最优的分片大小

object就是给我们的文件起名字了,文件名字随便起都行,但是我们要保证文件名字唯一

因为我们要返回URL给我们的前端

所以我们要拼接我们的url然后返回给我们的前端


Minio上传文件总结

判断桶是否存在,然后创建我们的桶

创建桶的时候设置一下桶的访问权限

这个config里面要写配置我们的权限的JSON字符串

这个就是我们的配置权限的JSON字符串


上传文件遇到的错误

9000是存储接口

9001是管理控制台接口

我的发送端口写错了

我们访问这个.png文件的时候,它是把我们的图片给下载下来了,我们想要他在页面展示出来,而不是下载下载


下载类型和展示类型

到底是下载呢还是展示呢

这取决于我们的浏览器的访问的类型

我们的这个是image类型 所以展示图片

这个String类型呢,就是下载我们的图片

根本原因就是这个对象的 content type类型


我们在这个存储对象里面往下拉,就可以看到我们的content type类型

stream类型就是我们的下载类型

设置我们的对象的content type

我们要在我们上传我们的对象的时候设置

contentType()方法

我们这样子写,就是我们上传的时候是什么类型,那么我们展示的时候就是什么类型

OK,这次我们就能成功查到了


上传图片-异常处理

我们把minio关闭掉之后,我们继续上传

但是它还是返回的是成功

我们添加异常方法签名,然后try catch抛出

但是我们不可能所有的方法都弄try catch

所以我们使用全局异常处理类

让全局异常处理类去处理我们的Controller的异常


Minio上传目录(根据时间自动生成)


Minio删除文件

因为我们上传文件的时候肯定还要修改文件,修改后,我们的之前的文件肯定要删除

上传文件使用的时putObject()

所以我们删除文件的时候使用

removeObject()

使用builder()构造者模式

bucket()传我们的桶的名字

object()传我们文件对应的路径,及url

然后我们build()构建之后,直接删除就好了

这个是我们的Controller

这个是我们的Service

这个是我们的图片的路径

已知,blog是我们的桶的名字,

所以blog后面的那一大段,就是我们要传的url,也就是我们传给构造者模式

object()方法里面的参数


访问权限

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值