1.pom.xml文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- minio -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.10</version>
</dependency>
<!-- alibaba的fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
2.application.yml文件
minio:
endpoint: http://192.168.31.112:9000
accesskey: minioadmin
secretKey: minioadmin
spring:
servlet:
multipart:
enabled: true
max-request-size: 100GB
max-file-size: 100GB
3.创建minio配置类
package com.minio.config;
import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MinioConfig {
/**
* 连接url
*/
@Value("${minio.endpoint}")
private String endpoint;
/**
* 用户名
*/
@Value("${minio.accesskey}")
private String accesskey;
/**
* 密码
*/
@Value("${minio.secretKey}")
private String secretKey;
@Bean
public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
return new MinioClient(endpoint , accesskey , secretKey);
}
}
4.创建文件处理工具类
package com.minio.util;
import com.alibaba.fastjson.JSONObject;
import io.minio.MinioClient;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;
@Component
public class MinioUtils {
@Autowired
private MinioClient minioClient;
/**
* 创建桶
* @param bucketName
*/
public void createBucket(String bucketName) throws InvalidBucketNameException, InsufficientDataException, XmlPullParserException, ErrorResponseException, NoSuchAlgorithmException, IOException, NoResponseException, InvalidKeyException, InternalException, RegionConflictException {
boolean is = minioClient.bucketExists(bucketName);
if (is){
return;
}
minioClient.makeBucket(bucketName);
}
/**
* 文件上传
* @param file
* @param bucketName
* @return
*/
public JSONObject uploadFile(MultipartFile file,String bucketName) {
JSONObject result = new JSONObject();
try {
createBucket(bucketName);
String originalFilename = file.getOriginalFilename(); //文件名
String last = originalFilename.substring(originalFilename.lastIndexOf("."));
String randomID = UUID.randomUUID().toString();
String fileID = randomID + last;
minioClient.putObject(bucketName , fileID , file.getInputStream() , file.getContentType());
result.put("fileName",originalFilename );
result.put("fileID",fileID );
}catch (Exception e){
e.printStackTrace();
}
return result;
}
/**
* 获取文件流
* @param bucketName
* @param fileID
*/
public InputStream getInputStream(String bucketName , String fileID) throws InvalidArgumentException, InvalidBucketNameException, InsufficientDataException, XmlPullParserException, ErrorResponseException, NoSuchAlgorithmException, IOException, NoResponseException, InvalidKeyException, InternalException {
return minioClient.getObject(bucketName, fileID);
}
}
5.创建上传控制器
package com.minio.controller;
import com.alibaba.fastjson.JSONObject;
import com.minio.util.MinioUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequestMapping("file")
public class FileController {
private String BUCKET_NAME = "sys-file-bucket";
@Autowired
private MinioUtils minioUtils;
@RequestMapping("uploadFile")
public JSONObject uploadFile(@RequestParam(name = "file") MultipartFile multipartFile){
return minioUtils.uploadFile(multipartFile, BUCKET_NAME);
}
}