Docker 下 MinIO 安装与配置_JAVA·D·WangJing的博客-CSDN博客





mac idea 创建 springboot 项目_JAVA·D·WangJing的博客-CSDN博客_mac搭建一个springboot项目
- <dependency>
- <groupId>io.miniogroupId>
- <artifactId>minioartifactId>
- <version>8.0.3version>
- dependency>
- spring:
- # 配置文件上传大小限制
- servlet:
- multipart:
- max-file-size: 200GB
- max-request-size: 200GB
- minio:
- endpoint: http://**.**.**.**:8801
- accessKey: bx20******k84h
- secretKey: 4wL8****************1mok
- bucketName: test
- package com.wangjing.minio.conf;
-
- import io.minio.MinioClient;
- import lombok.Data;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.context.annotation.Bean;
- import org.springframework.stereotype.Component;
-
- /**
- * @author: wangjing
- * @createTime: 2022-09-09 14:31
- * @version:
- * @Description: 注册minio客户端
- */
- @Data
- @Component
- public class MinIoClientConfig {
-
- @Value("${minio.endpoint}")
- private String endpoint;
-
- @Value("${minio.accessKey}")
- private String accessKey;
-
- @Value("${minio.secretKey}")
- private String secretKey;
-
- /**
- * 注入minio 客户端
- *
- * @return
- */
- @Bean
- public MinioClient minioClient() {
- return MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
- }
-
- }
- package com.wangjing.minio.service;
-
- import com.wangjing.minio.entity.ObjectItem;
- import io.minio.*;
- import io.minio.messages.DeleteError;
- import io.minio.messages.DeleteObject;
- import io.minio.messages.Item;
- import org.apache.commons.io.IOUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.http.HttpHeaders;
- import org.springframework.http.HttpStatus;
- import org.springframework.http.MediaType;
- import org.springframework.http.ResponseEntity;
- import org.springframework.stereotype.Component;
- import org.springframework.web.multipart.MultipartFile;
-
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.UnsupportedEncodingException;
- import java.net.URLEncoder;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.stream.Collectors;
-
- /**
- * @author: wangjing
- * @createTime: 2022-09-09 14:33
- * @version:
- * @Description: minio工具类
- */
- @Component
- public class MinioService {
-
- @Autowired
- private MinioClient minioClient;
-
- @Value("${minio.bucketName}")
- private String bucketName;
-
- /**
- * 判断bucket是否存在,不存在则创建
- *
- * @param name
- */
- public void existBucket(String name) {
- try {
- boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(name).build());
- if (!exists) {
- minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /**
- * 创建存储bucket
- *
- * @param bucketName
- * @return
- */
- public Boolean makeBucket(String bucketName) {
- try {
- minioClient.makeBucket(MakeBucketArgs.builder()
- .bucket(bucketName)
- .build());
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }
-
- /**
- * 删除存储bucket
- *
- * @param bucketName
- * @return
- */
- public Boolean removeBucket(String bucketName) {
- try {
- minioClient.removeBucket(RemoveBucketArgs.builder()
- .bucket(bucketName)
- .build());
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }
-
- /**
- * 多文件上传
- *
- * @param multipartFileArr
- * @return
- */
- public List
upload(MultipartFile[] multipartFileArr) { - List
names = new ArrayList<>(multipartFileArr.length); - for (MultipartFile file : multipartFileArr) {
-
- names.add(upload(file));
- }
- return names;
- }
-
- /**
- * 单文件上传
- *
- * @param multipartFile
- * @return
- */
- public String upload(MultipartFile multipartFile) {
- String fileName = multipartFile.getOriginalFilename();
- String[] split = fileName.split("\\.");
- if (split.length > 1) {
- fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1];
- } else {
- fileName = fileName + System.currentTimeMillis();
- }
- InputStream in = null;
- try {
- in = multipartFile.getInputStream();
- minioClient.putObject(PutObjectArgs.builder()
- .bucket(bucketName)
- .object(fileName)
- .stream(in, in.available(), -1)
- .contentType(multipartFile.getContentType())
- .build()
- );
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (in != null) {
- try {
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return fileName;
- }
-
- /**
- * 下载文件
- *
- * @param fileName
- * @return
- */
- public ResponseEntity<byte[]> download(String fileName) {
- ResponseEntity<byte[]> responseEntity = null;
- InputStream in = null;
- ByteArrayOutputStream out = null;
- try {
- in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
- out = new ByteArrayOutputStream();
- IOUtils.copy(in, out);
- //封装返回值
- byte[] bytes = out.toByteArray();
- HttpHeaders headers = new HttpHeaders();
- try {
- headers.add("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- headers.setContentLength(bytes.length);
- headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
- headers.setAccessControlExposeHeaders(Arrays.asList("*"));
- responseEntity = new ResponseEntity<byte[]>(bytes, headers, HttpStatus.OK);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (in != null) {
- try {
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (out != null) {
- out.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return responseEntity;
- }
-
- /**
- * 查看文件对象
- *
- * @param bucketName
- * @return
- */
- public List
listObjects(String bucketName) { - Iterable
> results = minioClient.listObjects( - ListObjectsArgs.builder().bucket(bucketName).build());
- List
objectItems = new ArrayList<>(); - try {
- for (Result
- result : results) {
- Item item = result.get();
- ObjectItem objectItem = new ObjectItem();
- objectItem.setObjectName(item.objectName());
- objectItem.setSize(item.size());
- objectItems.add(objectItem);
- }
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- return objectItems;
- }
-
- /**
- * 批量删除文件对象
- *
- * @param bucketName
- * @param objects
- * @return
- */
- public Iterable
> removeObjects(String bucketName, List objects) { - List
dos = objects.stream().map(e -> new DeleteObject(e)).collect(Collectors.toList()); - Iterable
> results = - minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(dos).build());
- return results;
- }
- }
- package com.wangjing.minio.entity;
-
- import lombok.Data;
-
- /**
- * @author: wangjing
- * @createTime: 2022-09-09 14:36
- * @version:
- * @Description: 实体类
- */
- @Data
- public class ObjectItem {
- private String objectName;
- private Long size;
- }
- package com.wangjing.minio.controller;
-
- import com.wangjing.minio.service.MinioService;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.multipart.MultipartFile;
-
- import java.util.List;
-
- /**
- * @author:
- * @createTime: 2022-09-09 14:37
- * @version:
- * @Description:
- */
- @RestController
- @Slf4j
- public class MinioController {
-
- @Autowired
- private MinioService minioService;
-
- @Value("${minio.endpoint}")
- private String address;
-
- @Value("${minio.bucketName}")
- private String bucketName;
-
-
- @PostMapping("/upload")
- public Object upload(MultipartFile file) {
-
- String upload = minioUtil.upload(file);
-
- return address + "/" + bucketName + "/" + upload;
- }
-
- }





注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!