背景
公司的开发框架集成了附件本地存储,阿里云,华为云等,现我的项目有要求附件存储与利用部署环境不能是同一台服务器,也不能应用云存储,通过技术选型后决定框架整合minio,将minio部署在另一台服务器开明外网端口即可解决问题
Minio装置部署
下载minio装置部署包,创立对应配置文件,这里提供一个整合后的压缩包
下载地址:https://download.csdn.net/dow...
创立minioData文件夹作为文件存储门路,解压安装包依据搁置门路批改对应配置文件文件
minio-service.xml和run.bat
<service> <id>minio</id> <name>MinIO Service</name> <description>MinIO is a High Performance Object Storage</description> <logpath>D:\minio\logs</logpath> <log mode="roll-by-size"> <sizeThreshold>10240</sizeThreshold> <keepFiles>8</keepFiles> </log> <executable>D:\minio\run.bat</executable></service>
set MINIO_ACCESS_KEY=adminset MINIO_SECRET_KEY=abcd@1234minio.exe server -address :9999 D:\minioData
解压部署包后cmd进入对应解压门路,输出命令minio.exe server D:\minioData 初始化后敞开cmd命令
应用服务装置工具装置服务,抉择minio-service.exe
windows服务装置工具下载地址:https://download.csdn.net/dow...
启动服务后拜访 http://127.0.0.1:9999/
用户名:admin 明码:abcd@1234 (端口及账户明码都是在run.bat文件中配置的)
进入零碎创立bucket用于存储文件(相似于阿里云)
配置pom文件
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.1.0</version> </dependency>
配置yml文件
这里别离配置上传/下载地址是正式我的项目可能配置外网端口后,服务器中不能拜访对应的外网端口,上传走内网,下载走外网
#minio配置 # 上传地址 minio_uploadurl: http://192.168.1.42:9999/ # 下载地址 minio_downloadurl: http://192.168.1.42:9999/ # 账户 minio_accesskey: admin # 明码 minio_secrectkey: abcd@1234 # 存储文件夹 minio_bucknetname: xxx
Minio工具类
初始化client
public MinioClient InitMinio() { MinioClient minioClient = MinioClient.builder(). endpoint(frameConfig.getMinio_uploadurl()). credentials(frameConfig.getMinio_accesskey(),frameConfig.getMinio_secrectkey()).build(); try{ boolean isExist = minioClient.bucketExists(frameConfig.getMinio_bucknetname()); if (!isExist) { minioClient.makeBucket(frameConfig.getMinio_bucknetname()); } }catch (Exception e){ e.printStackTrace(); } return minioClient; }
上传文件
getkey办法只是指定对应的自定义存储门路
指定content-type是为了浏览器能关上附件时,图片和pdf等文件可能在线浏览
不指定默认都是stream,关上文件对立为下载
public boolean uploadMinioFile(InputStream stream, AttachmentDO attachmentDO,String contentType){ boolean result = true; try{ MinioClient minioClient = InitMinio(); String bucketName =frameConfig.getMinio_bucknetname(); PutObjectOptions option = new PutObjectOptions(stream.available(), -1); option.setContentType(contentType); minioClient.putObject(bucketName,getKey(attachmentDO),stream,option); }catch (Exception e){ logger.error("Minio上传文件失败:" + e.getMessage()); result = false; } return result; }
下载文件
须要留神的是,生成的文件下载地址是和MinioClient中指定的服务器地址绑定的,应用nginx代理后是有效的
public String readMinioCommonFile(AttachmentDO attachmentDO){ String fileurl = ""; try{ MinioClient minioClient = InitMinio(); String bucketName =frameConfig.getMinio_bucknetname(); return minioClient.presignedGetObject(bucketName, getKey(attachmentDO)); }catch (Exception e){ logger.error("Minio读取文件失败:" + e.getMessage()); } return fileurl; }
删除文件
public boolean deleteMinioFile(AttachmentDO attachmentDO){ boolean result = true; try{ MinioClient minioClient = InitMinio(); String bucketName =frameConfig.getMinio_bucknetname(); minioClient.removeObject(bucketName,getKey(attachmentDO)); }catch (Exception e){ logger.error("Minio删除文件失败:" + e.getMessage()); result = false; } return result; }