1. 在pom文件中,添加依赖:
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.0.2</version> </dependency>
2. 在yml文件中添加minio的配置信息:
minio: endpoint: http://192.168.1.55:9000 accessKey: 1777QN2GK9S6N02G83NK secretKey: 6gMzG26973fXJfKxEOSxaUTrFdy3+QtSggdprESJ bucketName: test
3. 创建minio的配置文件:
package com.common.properties; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * minio配置信息 * admin2021/9/6 16:57 */ @Component public class MinioProperties { public static String endpoint; public static String accessKey; public static String secretKey; public static String bucketName; @Value("${minio.endpoint}") public void setEndpoint(String endpoint) { MinioProperties.endpoint = endpoint; } @Value("${minio.accessKey}") public void setAccessKey(String accessKey) { MinioProperties.accessKey = accessKey; } @Value("${minio.secretKey}") public void setSecretKey(String secretKey) { MinioProperties.secretKey = secretKey; } @Value("${minio.bucketName}") public void setBucketName(String bucketName) { MinioProperties.bucketName = bucketName; } }
4. 编写minio工具类:
package com.common.utils; import com.common.properties.MinioProperties; import io.minio.MinioClient; import io.minio.PutObjectOptions; import io.minio.errors.*; import lombok.extern.slf4j.Slf4j; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.net.URLDecoder; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; /** * minio文件上传工具类 */ @Slf4j public class MinioUtil { private static String endpoint; private static String accessKey; private static String secretKey; private static String bucketName; static { endpoint = MinioProperties.endpoint; accessKey = MinioProperties.accessKey; secretKey = MinioProperties.secretKey; bucketName = MinioProperties.bucketName; } private static MinioClient minioClient = null; /** * 上传文件 * * @param file 文件 * @return 文件链接地址 */ public static Object upload(MultipartFile file) { String file_url = ""; try { initMinio(endpoint, accessKey, secretKey); // 检查存储桶是否已经存在 if (minioClient.bucketExists(bucketName)) { log.info("Bucket already exists."); } else { // 创建一个名为ota的存储桶 minioClient.makeBucket(bucketName); log.info("create a new bucket."); } InputStream stream = file.getInputStream(); // 获取文件名 String orgName = file.getOriginalFilename(); if ("".equals(orgName)) { orgName = file.getName(); } orgName = getFileName(orgName); String objectName = "/" + orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.indexOf(".")); // 使用putObject上传一个本地文件到存储桶中。 minioClient.putObject(bucketName, objectName, stream, new PutObjectOptions(stream.available(), -1)); stream.close(); file_url = minioClient.getObjectUrl(bucketName, objectName); } catch (IOException | RegionConflictException | InvalidResponseException | InvalidBucketNameException | InvalidKeyException | NoSuchAlgorithmException | XmlParserException | ErrorResponseException | InternalException | InsufficientDataException e) { log.error(e.getMessage(), e); } return file_url; } /** * 获取文件流 */ public static InputStream getMinioFile(String bucketName, String objectName) { InputStream inputStream = null; try { initMinio(endpoint, accessKey, secretKey); inputStream = minioClient.getObject(bucketName, objectName); } catch (Exception e) { log.info("文件获取失败" + e.getMessage()); } return inputStream; } /** * 删除文件 */ public static void removeObject(String bucketName, String objectName) { try { initMinio(endpoint, accessKey, secretKey); minioClient.removeObject(bucketName, objectName); } catch (Exception e) { log.info("文件删除失败" + e.getMessage()); } } /** * 获取文件外链 */ public static String getObjectURL(String bucketName, String objectName, Integer expires) { initMinio(endpoint, accessKey, secretKey); try { String url = minioClient.presignedGetObject(bucketName, objectName, expires); return URLDecoder.decode(url, "UTF-8"); } catch (Exception e) { log.info("文件路径获取失败" + e.getMessage()); } return null; } /** * 初始化客户端 */ private static void initMinio(String endpoint, String accessKey, String secretKey) { if (minioClient == null) { try { minioClient = new MinioClient(endpoint, accessKey, secretKey); } catch (InvalidEndpointException | InvalidPortException e) { e.printStackTrace(); } } } /** * 判断文件名是否带盘符,重新处理 */ private static String getFileName(String fileName) { //判断是否带有盘符信息 // Check for Unix-style path int unixSep = fileName.lastIndexOf('/'); // Check for Windows-style path int winSep = fileName.lastIndexOf('\\'); // Cut off at latest possible point int pos = (winSep > unixSep ? winSep : unixSep); if (pos != -1) { // Any sort of path separator found... fileName = fileName.substring(pos + 1); } //替换上传文件名字的特殊字符 fileName = fileName.replace("=", "").replace(",", "").replace("&", "").replace("#", ""); return fileName; } }
你的努力,终将成为你最有力的资本!