MinIO使用,文件上传和下载
2023-12-17 23:50:16
MinIO使用,文件上传和下载
中文文档:https://www.minio.org.cn/docs/minio/kubernetes/upstream/index.html
官网:https://min.io/
官网下载和安装:https://min.io/download#/kubernetes
安装
二进制文件安装
下载MinIO
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20231214185157.0.0-1.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm
启动MinIO
minio server ~/minio --console-address :9090
后台运行方式
nohup /www/minio/minio server --console-address :9090 /www/minio/data > /www/minio/data/minio.log 2>&1 &
默认账号密码为
用户名:minioadmin
密码:minioadmin
进入页面
docker安装
安装docker
如果本机有就不需要安装了
移出旧的docker
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
使用 yum 安装
# 安装依赖
sudo yum install -y yum-utils
# 配置阿里云镜像
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io
启动docker
sudo systemctl enable docker
sudo systemctl start docker
如果想让里面镜像开机启动
docker run 指令中加入 --restart=always
安装MinIo
拉去镜像
docker pull minio/minio
运行
#最近更新的命令
docker run -d \
-p 9000:9000 \
-p 9090:9090 \
--name minio \
-v /home/minio/data:/data \
-e "MINIO_ROOT_USER=用户名" \
-e "MINIO_ROOT_PASSWORD=密码" \
minio/minio server /data --console-address ":9090"
之后访问9090
端口;看到这个页面即为成功
页面展示
Java操作MinIO
创建SpringBoot项目,需要注意的是如果请求结束后想在浏览器中查看需要增加权限!!!
点击这个将其修改为公开
安装依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>JAVAVERSION</version>
</dependency>
设置最大上传大小-SpringBoot中
最好设置下,防止测试时候文件过大无法上传
server.port=8888
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
如何使用
创建MinioClient
// 创建连接对象
MinioClient minioClient = MinioClient.builder().endpoint(uploadUrl)
.credentials("bunny", "02120212")
.build();
判断桶是否存在
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
判断桶是否存在,如果不存在则创建桶
// 判断桶是否存在,如果不存在则创建桶
if (!found) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
} else {
System.out.println("桶已存在");
}
文件上传
其中contentType
可以不填写,这个是指文件类型
// 文件上传
minioClient.putObject(PutObjectArgs.builder().bucket(bucketName)
.object(fileName)// 这里是文件名称
.stream(file.getInputStream(), file.getSize(), -1)// 文件内容,文件大小
// .contentType("video/mp4")// 文件的类型,可以不填写
.build());
返回访问路径
// 返回路径名称---访问时用
return uploadUrl + "/" + bucketName + "/" + fileName;
在方法中注意使用
try catch
实际操作
Controller中
设置请求路径,我这里是post请求
@Tag(name = "上传文件")
@RestController
public class UploadFileController {
@Autowired
private UploadFIleService uploadFIleService;
@Operation(summary = "Upload")
@PostMapping("/uploadFile")
public String uploadFile(@RequestParam("file") MultipartFile multipartFile) {
return uploadFIleService.uploadFIle(multipartFile);
}
}
Service中
创建接口和实现类
接口
package com.example.minio.service;
import org.springframework.web.multipart.MultipartFile;
public interface UploadFIleService {
String uploadFIle(MultipartFile file);
}
实现类
package com.example.minio.service.impl;
import com.example.minio.service.UploadFIleService;
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@Service
public class UploadFIleServiceImpl implements UploadFIleService {
@Override
public String uploadFIle(MultipartFile file) {
String uploadUrl = "http://192.168.31.140:9000";// 上传路径地址
String bucketName = "bunny-test";// 桶的名称
String fileName = file.getOriginalFilename();// 文件名称
try {
// 创建连接对象
MinioClient minioClient = MinioClient.builder().endpoint(uploadUrl)
.credentials("bunny", "02120212")
.build();
// 判断桶是否存在
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
// 判断桶是否存在,如果不存在则创建桶
if (!found) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
} else {
System.out.println("桶已存在");
}
// 文件上传
minioClient.putObject(PutObjectArgs.builder().bucket(bucketName)
.object(fileName)// 这里是文件名称
.stream(file.getInputStream(), file.getSize(), -1)// 文件内容,文件大小
// .contentType("video/mp4")// 文件的类型,可以不填写
.build());
// 返回路径名称---访问时用
return uploadUrl + "/" + bucketName + "/" + fileName;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
测试请求
需要注意的是如果请求结束后想在浏览器中查看需要增加权限!!!
点击这个将其修改为公开
之后访问服务器
文件中已包含,这个桶没有创建,但是不存在自动创建了一个
可以访问
throw new RuntimeException(e);
}
}
}
## 测试请求
需要注意的是如果请求结束后想在浏览器中查看需要增加权限!!!
点击这个将其修改为公开
[外链图片转存中...(img-nequIWuJ-1702822622971)]
之后访问服务器
[外链图片转存中...(img-0Zie22dn-1702822622971)]
文件中已包含,这个桶没有创建,但是不存在自动创建了一个
[外链图片转存中...(img-aegMV599-1702822622971)]
可以访问
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/069326d2bb7142ee8861f8a66ab8f3cc.png)
文章来源:https://blog.csdn.net/weixin_46533577/article/details/135051616
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!