docker安装minio
docker pull minio/minio
docker images
repository tag image id created size
minio/minio latest 162489e21d26 7 days ago 165mb
nginx latest 7f553e8bbc89 7 days ago 192mb
# 外挂磁盘存储使用
mkdir -p /usr/local/minio/data
# 外挂配置文件使用
mkdir -p /usr/local/minio/config
# 创建minio 容器
docker run -d --name minio -p 9000:9000 -p 9001:9001 -v /usr/local/minio/data:/data -v /usr/local/minio/config:/root/.minio -e minio_root_user=admin -e minio_root_passwo
rd=admin minio/minio server /data --console-address ":9001"
# 创建失败
docker logs minio
fatal unable to validate credentials inherited from the shell environment: invalid credentials
> please provide correct credentials
hint:
minio_root_user length should be at least 3, and minio_root_password length at least 8 characters
# 密码不能少于8个字符
docker rm minio
docker run -d --name minio -p 9000:9000 -p 9001:9001 -v /usr/local/minio/data:/data -v /usr/local/minio/config:/root/.minio -e minio_root_user=admin -e minio_root_passwo
rd=admin123 minio/minio server /data --console-address ":9001"
# 防火墙开放端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9001/tcp --permanent
# 重启防火墙
sudo firewall-cmd --reload访问测试
http://ip:9001

springboot上传文件到minio
pom文件引入依赖
<dependency>
<groupid>io.minio</groupid>
<artifactid>minio</artifactid>
<version>8.5.2</version>
</dependency>application.properties配置minio

spring.minio.access-key=pnehtjudw9enblulvtgt spring.minio.secret-key=p3yvngz2ei1uctn6vkozrof6icb7gfbiypr5raww spring.minio.endpoint=http://192.168.10.227:9000
配置minioclinet
@data
@configuration
@configurationproperties(prefix = "spring.minio")
@slf4j
public class minioconfig {
private string accesskey;
private string secretkey;
private string endpoint;
@bean
public minioclient minioclient() {
return minioclient.builder()
.endpoint(endpoint)
.credentials(accesskey, secretkey)
.build();
}
}fileservice
public interface fileservice {
/**
* 是否存在桶
*/
boolean bucketexists(string bucketname);
/**
* 创建桶
*/
void makebucket(string bucketname);
/**
* 删除桶
*/
void removebucket(string bucketname);
/**
* 获取当所有桶
*/
list<bucket> getallbuckets();
/**
* 上传文件
*/
string uploadfile(string bucketname, string prefix, multipartfile file) throws exception;
/**
* 文件预览
*/
string preview(string bucketname, string prefix, string filename) throws exception;
/**
* 文件下载
*/
void download(string bucketname, string prefix, string filename, httpservletresponse res);
/**
* 删除文件
*/
boolean removefile(string bucketname, string prefix, string filename);
/**
* 文件是否存在
*/
boolean isfileexists(string bucketname, string prefix, string filename) throws exception;
/**
* 生成一个带到期时间、签名的url,这个地址可以提供给没有登录的第三方共享访问或者上传对象,针对于bucket为私有的情况
*/
string getpresignedobjecturl(string bucketname, string prefix, string filename);
}fileserviceimpl
package com.example.demo.service.impl;
import java.util.list;
import java.util.objects;
import java.util.uuid;
import javax.servlet.http.httpservletresponse;
import cn.hutool.core.io.file.filenameutil;
import com.example.demo.service.fileservice;
import io.minio.*;
import io.minio.http.method;
import io.minio.messages.bucket;
import lombok.extern.slf4j.slf4j;
import org.apache.commons.lang3.stringutils;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;
import org.springframework.web.multipart.multipartfile;
/**
* @author :王建
* @since :2024-10-10 11:38
*/
@service
@slf4j
public class fileserviceimpl implements fileservice {
@autowired
private minioclient minioclient;
@override
public boolean bucketexists(string bucketname) {
try {
return minioclient.bucketexists(bucketexistsargs.builder().bucket(bucketname).build());
} catch (exception e) {
throw new runtimeexception(e);
}
}
@override
public void makebucket(string bucketname) {
try {
minioclient.makebucket(makebucketargs.builder()
.bucket(bucketname)
.build());
} catch (exception e) {
throw new runtimeexception(e);
}
}
@override
public void removebucket(string bucketname) {
try {
minioclient.removebucket(removebucketargs.builder()
.bucket(bucketname)
.build());
} catch (exception e) {
throw new runtimeexception(e);
}
}
@override
public list<bucket> getallbuckets() {
try {
return minioclient.listbuckets();
} catch (exception e) {
throw new runtimeexception(e);
}
}
@override
public string uploadfile(string bucketname, string prefix, multipartfile file) throws exception {
string uuid = uuid.randomuuid().tostring();
// 重新命名原来文件
string filename = uuid + "." + filenameutil.extname(file.getoriginalfilename());
log.info("源文件名称:{},重命名后文件名称:{}", file.getoriginalfilename(), filename);
string objectname = stringutils.isblank(prefix) ? filename : "/" + prefix + "/" + filename;
putobjectargs objectargs = putobjectargs.builder().bucket(bucketname).object(objectname)
.stream(file.getinputstream(), file.getsize(), -1).contenttype(file.getcontenttype()).build();
minioclient.putobject(objectargs);
return uuid;
}
@override
public string preview(string bucketname, string prefix, string filename) throws exception {
// 查看文件地址
string objectname = stringutils.isblank(prefix) ? filename : "/" + prefix + "/" + filename;
getpresignedobjecturlargs build = getpresignedobjecturlargs.builder().bucket(bucketname).object(objectname).method(method.get).build();
return minioclient.getpresignedobjecturl(build);
}
@override
public void download(string bucketname, string prefix, string filename, httpservletresponse res) {
}
@override
public boolean removefile(string bucketname, string prefix, string filename) {
return null;
}
@override
public boolean isfileexists(string bucketname, string prefix, string filename) throws exception {
string objectname = stringutils.isblank(prefix) ? filename : "/" + prefix + "/" + filename;
statobjectresponse statobjectresponse = minioclient.statobject(statobjectargs.builder().bucket(bucketname).object(objectname).build());
return !objects.isnull(statobjectresponse);
}
@override
public string getpresignedobjecturl(string bucketname, string prefix, string filename) {
return null;
}
}
配置minio允许直接预览pdf文件

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论