1.本文章用docker启动 首先拉取minio镜像 命令:
docker load -i /home/tools/minio.tar
2.启动minion文件服务器 命令:
docker run -p 9000:9000 -d --name minio -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin123" -v /opt/services/minio/data:/data -v /opt/services/minio/config:/root/.minio docker.io/minio/minio:RELEASE.2020-10-12T21-53-21Z server /data
3.查看minio是否启动成功 命令:docker ps
4. 登录minio服务器 输入步骤2中设置的用户名 密码:
5.搭建springBoot项目工程 添加maven依赖:
io.minio minio7.1.0
6.编写minio工具类:
package com.example;
import io.minio.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.activation.MimetypesFileTypeMap;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import lombok.extern.slf4j.Slf4j;
@Component
@Slf4j
public class MinioService
{
@Value("${minio.url}")
private String url;
@Value("${minio.access-key}")
private String accessKey;
@Value("${minio.secret-key}")
private String secretKey;
public MinioClient getMinioClient(){
return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
}
public void isExistBucketName(String bucketName) throws Exception {
boolean isExist = getMinioClient().bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if(!isExist) {
getMinioClient().makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
log.info(bucketName+"创建成功");
}
}
public Results localMinioUpload(String filePath, String fileName,String bucketName) {
try {
//判断存储桶是否存在,不存在则创建
isExistBucketName(bucketName);
// minio仓库名
File file = new File(filePath);
InputStream is = new FileInputStream(file);
String contentType = new MimetypesFileTypeMap().getContentType(file);
System.out.println(contentType);
getMinioClient().putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.stream(is,
file.length(),
-1)
.contentType(contentType)
.build());
log.info("成功上传文件 " + fileName + " 至 " + bucketName);
return Results.success(System.currentTimeMillis());
} catch (Exception e) {
e.printStackTrace();
return Results.requestFailMsg(System.currentTimeMillis(),"上传存储服务器出错异常");
}
}
public Results minioUpload(MultipartFile file, String fileName, String bucketName) {
try {
//判断存储桶是否存在,不存在则创建
isExistBucketName(bucketName);
// fileName为空,说明要使用源文件名上传
if (fileName == null) {
fileName = file.getOriginalFilename();
fileName = fileName.replaceAll(" ", "_");
}
getMinioClient().putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.stream(file.getInputStream(),
file.getSize(),
-1)
.contentType(file.getContentType())
.build());
log.info("成功上传文件 " + fileName + " 至 " + bucketName);
// String fileUrl = bucketName + "/" + fileName;
// Map map = new HashMap();
// map.put("fileUrl", fileUrl);
// map.put("bucketName", bucketName);
// map.put("originFileName", fileName);
return Results.success(System.currentTimeMillis());
} catch (Exception e) {
e.printStackTrace();
return Results.requestFailMsg(System.currentTimeMillis(),"上传存储服务器出错异常");
}
}
public boolean isFileExisted(String fileName,String bucketName) {
InputStream inputStream = null;
try {
inputStream = getMinioClient().getObject(
GetObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.build());
if (inputStream != null) {
return true;
}
} catch (Exception e) {
return false;
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return false;
}
public boolean delete(String bucketName,String fileName) {
try {
getMinioClient().removeObject(
RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build());
return true;
} catch (Exception e) {
log.error(e.getMessage());
return false;
}
}
public String getShowUtrl (String fileName,int expires,String bucketName) throws Exception{
String tempUrl = getMinioClient().presignedGetObject(bucketName, fileName, expires);
return tempUrl;
}
public Results downloadFile(String objectName, HttpServletResponse response, String bucketName) {
try {
InputStream stream = getMinioClient().getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
String filename = new String(objectName.getBytes("ISO8859-1"), StandardCharsets.UTF_8);
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
ServletOutputStream servletOutputStream = response.getOutputStream();
int len;
byte[] buffer = new byte[1024];
while((len=stream.read(buffer)) > 0){
servletOutputStream.write(buffer, 0, len);
}
servletOutputStream.flush();
stream.close();
servletOutputStream.close();
return Results.success(System.currentTimeMillis());
} catch (Exception e) {
e.printStackTrace();
return Results.requestFailMsg(System.currentTimeMillis(),"下载报错异常!");
}
}
public static void main(String[] args) throws Exception {
MinioService ms = new MinioService();
String strUrl = "D:/photo/1.jpg";
ms.localMinioUpload(strUrl,"D:/photo/1.jpg","test");
}
}
7.编写测试TestController层
@RestController
@RequestMapping("/minio")
public class TestController
{
@Value("${minio.bucket-name}")
private String bucketName;
@Autowired
private MinioService minioService;
@PostMapping("/minioUpload")
public Results minioUpload(MultipartFile file){
String fileName = file.getOriginalFilename();
return minioService.minioUpload(file, fileName, bucketName);
}
}
8.通过postman进行文件上传测试
9.然后去minio文件服务器上查看刚才上传的文件
10.最后附上码云gitee地址:https://gitee.com/hezhipeng_ek/minio.git 项目中有minio的docker镜像



