这里我选用的JDK1.8
一、导入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.2</version>
</dependency>
二、导入工具类
注意:这个工具类所有上传的文件和下载的文件都是基于配置的 bucketName 这一个桶的文件,
使用之前需要配置自己的 endpoint、bucketName、accessKey、secretKey
import io.minio.*;
import java.util.UUID;
public class FileUpload {
// minio部署的地址
private static String endpoint="http://192.168.31.208:5000";
// 桶名
private static String bucketName="minio-test";
// access key
private static String accessKey="minio-test";
// secret key
private static String secretKey="minio-test";
/**
* 本地上传
* @param fileName 本地要上传的文件名
*/
public static String upload(String fileName)throws Exception{
// 1. 拿到minio客户端
MinioClient minioClient= MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey,secretKey)
.build();
// 2. 判断bucket是否存在
if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
String minioFileName = UUID.randomUUID() +fileName.substring(fileName.lastIndexOf("."));
try {
minioClient.uploadObject(UploadObjectArgs.builder()
.object(minioFileName)
.filename(fileName)
.bucket(bucketName)
.build());
}catch (Exception e){
e.printStackTrace();
System.out.println(fileName+" 上传失败");
return null;
}
System.out.println(fileName+" 上传成功!");
String url=endpoint+"/"+bucketName+"/"+minioFileName;
return url;
}
/**
* 文件流上传 支持非本地上传
* @param fileInputStream 要上传文件的输入流
* @param minioFileName 推送到minio之后的名称
* @return
*/
public static String upload(InputStream fileInputStream, String minioFileName){
// 1. 拿到minio客户端
MinioClient minioClient= MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey,secretKey)
.build();
// 2. 判断bucket是否存在,若不存在,则创建bucket
try {
if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
}catch (Exception e) {
e.printStackTrace();
};
// 3. 上传文件
try {
minioClient.putObject(PutObjectArgs.builder()
.object(minioFileName)
.bucket(bucketName)
.stream(fileInputStream, fileInputStream.available(), -1)
.build());
}catch (Exception e){
e.printStackTrace();
System.out.println("上传失败");
return null;
}
String url=endpoint+"/"+bucketName+"/"+minioFileName;
return url;
}
/**
* MultipartFile 文件上传 支持非本地上传
* @param multipartFile 要上传的文件
* @param minioFileName 要上传到minio的文件名
* @return
*/
public static String upload(MultipartFile multipartFile, String minioFileName){
String url=null;
try {
url = upload(multipartFile.getInputStream(),minioFileName);
} catch (IOException e) {
e.printStackTrace();
}
return url;
}
/**
* MultipartFile 文件上传 支持非本地上传
* @param multipartFile 要上传的文件
*/
public static String upload(MultipartFile multipartFile){
String url=null;
try {
String minioFileName = UUID.randomUUID() + multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));
url = upload(multipartFile.getInputStream(),minioFileName);
} catch (IOException e) {
e.printStackTrace();
}
return url;
}
/**
* 下载到本地
* @param downloadFileName 将要从minio的桶中下载的文件名
* @param toLocalFileName 下载到当地的某个位置(带路径的文件全名)
*/
public static void download(String downloadFileName,String toLocalFileName) {
// 1.创建minio客户端
MinioClient minioClient = MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey,secretKey)
.build();
// 2.判断桶是否存在
try {
if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){
System.out.println(bucketName+" 这个桶不存在!");
return;
}
} catch (Exception e) {
e.printStackTrace();
}
// 3.下载文件
try {
minioClient.downloadObject(DownloadObjectArgs.builder()
.bucket(bucketName).object(downloadFileName).filename(toLocalFileName)
.build());
} catch (Exception e) {
e.printStackTrace();
System.out.println("下载失败!");
}
}
}
三、在application.yml文件里添加配置
上传视频时,有的视频内存过大,需要在配置文件中配置最大文件内存上限
spring:
servlet:
multipart:
max-file-size: 100MB # 文件的最大尺寸100MB
max-request-size: 100MB # 单次请求可以接收文件的最大尺寸为100MB,一般上传视频时会用到