贵阳微网站建设公司哪家好,做问卷的几个网站,网站开发+协作平台,crm系统介绍minio是一款分布式存储系统#xff0c;上一篇详细介绍了minio在windows环境下的搭建集群并通过nginx实现负载均衡#xff0c;这里简单介绍下springboot项目整合minio并实现文件的上传下载删除等操作。
一、依赖的引入
1.1、maven项目
dependencygroupIdio…minio是一款分布式存储系统上一篇详细介绍了minio在windows环境下的搭建集群并通过nginx实现负载均衡这里简单介绍下springboot项目整合minio并实现文件的上传下载删除等操作。
一、依赖的引入
1.1、maven项目
dependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion8.3.0/version
/dependency1.2、普通项目
普通项目采用手动引入jar包方式会挺麻烦的推荐使用maven来引入依赖 普通项目使用minio需要引入jar包大致包括minio-8.3.0.jar ; okio-2.5.0.jar ; okhttp-4.8.1.jar ; guava-22.0.jar
二、minio配置类
Configuration
Slf4j
public class MinioConfig {Value(${minio.endpoint})private String endpoint;Value(${minio.accessKey})private String accessKey;Value(${minio.secretKey})private String secretKey;Value(${minio.bucketName})private String bucketName;Beanpublic MinioClient minioClient(){MinioClient minioClient MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();try {boolean found minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());if(!found){minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());log.info(minio初始化桶bucketName);}} catch (Exception e) {log.error(e.getMessage());}return minioClient;}
}其中四个变量为application.yml中的配置MinioConfig.java配置文件创建了minio分布式存储系统的操作客户端minioClient并交给springboot进行管理且创建了名为java-bucket的桶。
# 分布式存储minio相关配置
minio:# 分布式存储的服务地址要做集群的话则是通过nginx配置负载均衡该地址指向nginx入口endpoint: http://127.0.0.1:9001# 分布式存储系统对应的用户名和密码accessKey: minioadminsecretKey: minioadmin# 所有文件均存储在该名称对应的桶中bucketName: java-bucket三、通过minioClient操作文件
Component
public class minioUtil{private static MinioClient minioClient;private static String bucketName;// 由于静态方法中只能用静态变量而静态变量无法直接实现注入为此通过非静态的set方法注入值Value(${minio.bucketName})public void setBucketName(String bucketName) {fileUtils.bucketName bucketName;}Autowiredpublic void setMinioClient(MinioClient minioClient) {fileUtils.minioClient minioClient;}// 将本地文件夹整个上传至minio存储系统,其中dirName表示上传的文件夹路径如 C:/admin/testDir len表示对源路径的截取长度使其上传至minio存储系统保持相对路径比如C:/admin/testDir/test.txt 截取成 admin/testDir/test.txtpublic static void minio_uploadFile(String dirName,int len){ListString filePathList new ArrayList();File file new File(dirName);minio_recursionGetFileList(file,filePathList);for (String s : filePathList) {minio_uploadSingleFile(s.substring(len,s.length()),s);}}// 递归获取parentFile文件夹下的所有文件目录private static void minio_recursionGetFileList(File parentFile, ListString filePathList) {File[] files parentFile.listFiles();for (File file : files) {if(file.isFile()){filePathList.add(file.getPath());}else {minio_recursionGetFileList(file,filePathList);}}}// 本地单个文件的上传public static void minio_uploadSingleFile(String objectName,String fileName){objectName objectName.replace(\\,/);// 上传文件try {minioClient.uploadObject(UploadObjectArgs.builder().bucket(bucketName).object(objectName) // 上传到分布式系统的文件名称.filename(fileName) // 本地文件路径.build());} catch (Exception e) {throw new RuntimeException(e);}}// 删除minio存储系统bucketName桶中文件// objectName为要删除的文件名如要删除b文件夹下的test.txt则objectName应为b/test.txtprivate static void minio_deleteFile(String objectName){try {minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());} catch (Exception e) {log.error(删除minio中文件出现错误e.getMessage());}}// minio存储系统中下载objectName的文件到fileName如下载objectName b/test.txt , fileName C:/test1.txtprivate static void minio_downloadFile(String objectName,String fileName){try {minioClient.downloadObject(DownloadObjectArgs.builder().bucket(bucketName).object(objectName).filename(fileName).build());} catch (Exception e) {log.info(下载minio文件出现错误e.getMessage());}}// 获取minio的bucketName桶的所有文件列表private static void minio_getFileList(){// 获取文件列表IterableResultItem results minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());IteratorResultItem iterator results.iterator();ListObject items new ArrayList();String format {fileName:%s,fileSize:%s};try {while (iterator.hasNext()){Item item iterator.next().get();System.out.println(item.objectName());System.out.println(item.size());}} catch (Exception e) {log.error(获取minio中文件列表出错e.getMessage());}}/*** description 多文件上传至minio系统*/public static void uploadToMinio(ListMultipartFile multipartFiles,String dir) {for (int i 0; i multipartFiles.size(); i) {minio_uploadFile(multipartFiles.get(i),multipartFiles.get(i).getName(),dir);}}private static void minio_uploadFile(MultipartFile file,String objectName,String dir){try {InputStream inputStream file.getInputStream();minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(dir/objectName).contentType(file.getContentType()).stream(inputStream, inputStream.available(), -1).build());} catch (Exception e) {log.error(文件上传至minio出错e.getMessage());}}// 将minio存储系统中整个dir目录全部删除public static void deleteDirFromMinio(String dir){try {IterableResultItem results minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).delimiter(dir).prefix(dir/).build());for (ResultItem itemResult : results) {Item item itemResult.get();minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(item.objectName()).build());}} catch (Exception e) {log.error(删除minio中文件出现错误e.getMessage());}}}