一、MinIO配置
主界面:
2.创建桶的文件路径
你可以设置任意想要配置的路径
3.管理桶权限
这里Prefix写 * 是为了匹配所有请求路径
Access: readonly就可以通过url访问图片了。
二、SpringBoot Maven项目:
导入坐标:
io.minio minio 8.3.7 com.squareup.okhttp3 okhttp 4.8.1
三、配置application.yml文件
#minio配置minio: oss: endpoint: http://192.168.0.101:9000 accessKey: minioadmin secretKey: minioadmin bucketName: 桶名称
四、编写读取配置类
import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@Component@Data@ConfigurationProperties(prefix = "minio.oss")public class MinioProperties { private String endpoint; private String accessKey; private String secretKey; private String bucketName;}
五、创建工具类
import io.minio.BucketExistsArgs;import io.minio.MakeBucketArgs;import io.minio.MinioClient;import io.minio.PutObjectArgs;import io.minio.errors.*;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile;import java.io.IOException;import java.io.InputStream;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.UUID;@Componentpublic class MinioUtils { @Autowired private MinioProperties minioProperties; public String upload(MultipartFile file) throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException { //获取Minio的配置参数 String endpoint = minioProperties.getEndpoint(); String accessKey = minioProperties.getAccessKey(); String secretKey = minioProperties.getSecretKey(); String bucketName = minioProperties.getBucketName(); // 获取上传的文件的输入流 InputStream inputStream = file.getInputStream(); //将文件上传到Minio中 //1.获取minio对象 MinioClient minioClient = MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); // 检查存储桶是否已经存在 boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (isExist) { System.out.println("Bucket already exists."); } else { // 创建一个名为 huike-crm 的存储桶,用于存储照片的zip文件。 minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } // 避免文件覆盖 生成日期文件夹格式+文件 :年/月/日 + 文件名 String originalFilename = file.getOriginalFilename(); //获取原始文件名 //拼接生成新的UUID形式的文件名 String objectName = new SimpleDateFormat("yyyy/MM/dd/").format(new Date()) + UUID.randomUUID().toString().replaceAll("-", "") + originalFilename.substring(originalFilename.lastIndexOf(".")); //2.通过Minio对象将图片上传到minio桶中 // 使用putObject上传一个文件到存储桶中。 PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName) .bucket(bucketName) .contentType(file.getContentType()) .stream(file.getInputStream(), file.getSize(), -1).build(); minioClient.putObject(objectArgs); //组装桶中文件的访问url String resUrl = endpoint + "/" + bucketName + "/" + objectName; return resUrl; }}
六、controller调用
//将文件存储到Minio中 @PostMapping("/upload") public Result upload(MultipartFile image) throws Exception { log.info("文件上传{}", image); String url = minioUtils.upload(image); //将图片上传到Minio中 log.info("文件上传ok,{}", url); return Result.success(url); }
来源地址:https://blog.csdn.net/u013799020/article/details/130094549