目录
一、安装minio
拉取镜像
启动
查看
进入登录页面
创建bucket
二、安装miniomc
三、代码
application.yml
MinioUtil
Controller
四、拓展
以下基于云服务和docker使用minio服务
一、安装minio
Minio 是一个开源的对象存储服务器。它允许用户在私有云环境中建立自己的对象存储解决方案,同时保持易用性、高可用性和可扩展性。
拉取镜像
docker pull minio/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"
查看
docker ps -a
(服务器防火墙添加9000和9090端口)
进入登录页面
输入ip:9090进入登录页面
账号密码是上面启动时的账号密码
创建bucket
二、安装miniomc
目前的minio上传的文件有七天的有效时间,现在需要安装miniomc使其永久有效
docker pull minio/mc
docker run -it --entrypoint=/bin/sh minio/mc
mc config host add minio http://你的ip:9000 [Access key] [Secret Key]
mc ls minio
mc anonymous
mc anonymous set download minio/xxx
xxx是桶的名称
三、代码
application.yml
server:
port: 4000
minio:
url: http://你的ip:9000
accessKey: minioadmin
secretKey: minioadmin
MinioUtil
工具类
@Component
public class MinioUtil {
@Resource
private MinioClient minioClient;
/**
* 创建bucket桶
*/
public void createBucket(String bucket) throws Exception {
boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());
if (!exists) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());
}
}
/**
* 上传文件
*/
public void uploadFile(InputStream inputStream, String bucket, String objectName) throws Exception {
minioClient.putObject(PutObjectArgs.builder().bucket(bucket).object(objectName)
.stream(inputStream, -1, 5242889L).build());
}
/**
* 列出所有桶
*/
public List<String> getAllBucket() throws Exception {
List<Bucket> buckets = minioClient.listBuckets();
return buckets.stream().map(Bucket::name).collect(Collectors.toList());
}
/**
* 列出当前桶及文件
*/
public List<FileInfo> getAllFile(String bucket) throws Exception {
Iterable<Result<Item>> results = minioClient.listObjects(
ListObjectsArgs.builder().bucket(bucket).build());
List<FileInfo> fileInfoList = new LinkedList<>();
for (Result<Item> result : results) {
FileInfo fileInfo = new FileInfo();
Item item = result.get();
fileInfo.setFileName(item.objectName());
fileInfo.setDirectoryFlag(item.isDir());
fileInfo.setEtag(item.etag());
fileInfoList.add(fileInfo);
}
return fileInfoList;
}
/**
* 下载文件
*/
public InputStream downLoad(String bucket, String objectName) throws Exception {
return minioClient.getObject(
GetObjectArgs.builder().bucket(bucket).object(objectName).build()
);
}
/**
* 删除桶
*/
public void deleteBucket(String bucket) throws Exception {
minioClient.removeBucket(
RemoveBucketArgs.builder().bucket(bucket).build()
);
}
/**
* 删除文件
*/
public void deleteObject(String bucket, String objectName) throws Exception {
minioClient.removeObject(
RemoveObjectArgs.builder().bucket(bucket).object(objectName).build()
);
}
/**
* 获取文件url
*/
public String getPreviewFileUrl(String bucketName, String objectName) throws Exception{
GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(bucketName).object(objectName).build();
return minioClient.getPresignedObjectUrl(args);
}
}
Controller
请求参数:
bucket:桶的名称
objectName:桶下的文件夹的名称
@Resource
private MinioUtil minioUtil;
@Value("${minio.url}")
private String url;
/**
* 上传文件
*/
@RequestMapping("/upload")
public String upload(MultipartFile uploadFile, String bucket, String objectName) throws Exception {
minioUtil.createBucket(bucket);
if (objectName != null) {
minioUtil.uploadFile(uploadFile.getInputStream(), bucket, objectName + "/" + uploadFile.getOriginalFilename());
} else {
minioUtil.uploadFile(uploadFile.getInputStream(), bucket, uploadFile.getOriginalFilename());
}
objectName = objectName + "/" + uploadFile.getOriginalFilename();
return url + "/" + bucket + "/" + objectName;
}
四、拓展
MinioUtil工具类里还有下载文件等方法,可以用。