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文件
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论