内容来源:尚硅谷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()方法里面的参数
访问权限