1.docker安装minio
1.1 下载minio镜像
docker pull minio/minio
1.2 创建并启动minIO容器
docker run -p 9000:9000 -p 9090:9090
--name minio
-d --restart=always
-e "MINIO_ACCESS_KEY=minioadmin"
-e "MINIO_SECRET_KEY=minioadmin"
-v /mydata/minio/data:/data
minio/minio server
/data --console-address ":9090" -address ":9000"
这里的 指的是命令还没有输入完,还需要继续输入命令,先不要执行的意思。
这里的9090端口指的是minio的客户端端口。虽然设置9090,但是我们在访问9000的时候,他也会自动跳到9090。
9000端口是minio的服务端端口,我们程序在连接minio的时候,就是通过这个端口来连接的。
-v就是docker run当中的挂载,这里的/mydata/minio/data:/data意思就是将容器的/data目录和宿主机的/mydata/minio/data目录做映射,这样我们想要查看容器的文件的时候,就不需要看容器当中的文件了。
注意在执行命令的时候,他是会自动在宿主机当中创建目录的。我们不需要手动创建。
minio所上传的文件默认都是存储在容器的data目录下的!
假如删除容器了宿主机当中挂载的目录是不会删除的。假如没有使用-v挂载目录,那他在宿主机的存储位置的文件会直接删除的。
宿主机的挂载目录一定是根目录,如果是相对路径会有问题。还有容器当中的目录也是必须是绝对路径(根路径就是带/的)。
所谓的挂载其实就是将容器目录和宿主机目录进行绑定了,操作宿主机目录,容器目录也会变化,操作容器目录,宿主机目录也会变化。这样做的目的 可以间接理解为就是数据持久化,防止容器误删,导致数据丢失的情况。
MINIO_ACCESS_KEY:账号
MINIO_SECRET_KEY:密码 (正常账号应该不低于3位,密码不低于8位,不然容器会启动不成功)
–console-address 指定客户端端口
-d –restart=always 代表重启linux的时候容器自动启动
–name minio 容器名称
2.创建桶并调整policy为public
浏览器输入http://ip:9090进入minio,输入账号密码登录。
点击此处创建桶
创建好桶后,点击桶进入详情页
把上面框住的地方改为public,不然不能从外面访问到桶里的图片
3.java配置依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.0</version>
</dependency>
这里可能会出现minio和okhttp3的冲突,是因为每个版本的minio依赖对应一个okhttp版本,所以可以进入minio的pom里查看对应的okhttp版本。minio8.3.0对应的okhttp3版本是4.8.1,我们可以在pom中加入okhttp3的依赖来下载这个依赖
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.8.1</version>
<scope>compile</scope>
</dependency>
4.代码实现
在minio里生成accesskey和screctkey
在此处生成ak和sk,记得保存(不保存也没事,大不了重新生成)
在controller里初始化minio客户端
// 初始化MinIO客户端
final String accessKey = "your accesskey";
final String secretKey = "your screctkey";
final String bucketName = "your bucketname";
final String url="http://ip:9000/";
MinioClient minioClient = MinioClient.builder()
.endpoint("http://ip:9000") // 替换为您的MinIO服务器URL
.credentials(accessKey, secretKey)
.build();
下面是图片上传的方法实现
@PostMapping("upload")
public R uploadFile(HttpServletRequest request) throws ServletException, IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
Part part = request.getPart("file");
int i = abs(RandomUtil.randomInt());
String name=i+".jpg";
// System.out.println(part.getSize());
PutObjectArgs args=PutObjectArgs.builder().bucket(bucketName).object(name).stream(part.getInputStream(), part.getSize(), -1).contentType(part.getContentType()).build();
minioClient.putObject(args);
return R.success(url+bucketName+'/'+name);
}
发表回复