引入所需依赖minio
<!--minio-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.0.3</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.12</version>
</dependency>
创建 Spring boot 项目
引入配置类
@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();
}
}
配置 application.yml
spring:
# 配置文件上传大小限制
servlet:
multipart:
max-file-size: 200MB
max-request-size: 200MB
minio:
endpoint: http://192.168.31.134:9000
accessKey: minioadmin
secretKey: m
编写测试类Controller (多文件上传)
@PostMapping("/uploadlist")
public String uploadlist(@RequestParam(name = "file", required = false)
MultipartFile[] file) {
System.out.println(file.length);
if (file == null || file.length == 0) {
return "上传文件不能为空";
}
List<String> orgfileNameList = new ArrayList<>(file.length);
for (MultipartFile multipartFile : file) {
String orgfileName = multipartFile.getOriginalFilename();
orgfileNameList.add(orgfileName);
try {
//文件上传
InputStream in = multipartFile.getInputStream();
minioClient.putObject(
PutObjectArgs.builder().bucket(bucketName).object(orgfileName).stream(
in, multipartFile.getSize(), -1)
.contentType(multipartFile.getContentType())
.build());
in.close();
} catch (Exception e) {
return "上传失败";
}
}
Map<String, Object> data = new HashMap<String, Object>();
data.put("bucketName", bucketName);
data.put("fileName", orgfileNameList);
return "上传成功";
}
查看img 桶文件数量 (1)
三文件上传
返回结果
查看桶文件 为3
导致原因为 文件名称冲突
解决方法 给上传文件加上当前时间
再次上传问题解决
编写查看接口
@GetMapping("/list")
public List<Object> list2() throws Exception {
//获取bucket列表
Iterable<Result<Item>> myObjects = minioClient.listObjects(
ListObjectsArgs.builder().bucket(bucketName).build());
Iterator<Result<Item>> iterator = myObjects.iterator();
List<Object> items = new ArrayList<>();
String format = "{'fileName':'%s','fileSize':'%s'}";
while (iterator.hasNext()) {
Item item = iterator.next().get();
items.add(JSON.parse(String.format(format, item.objectName(),
formetFileSize(item.size()))));
}
System.out.println(items);
return items;
}
输出文件信息
编写下载文件接口
@RequestMapping("/download/{fileName}")
public void download(HttpServletResponse response, @PathVariable("fileName")
String fileName) {
InputStream in = null;
try {
// 获取对象信息
StatObjectResponse stat = minioClient.statObject(
StatObjectArgs.builder().bucket(bucketName).object(fileName).build());
response.setContentType(stat.contentType());
response.setHeader("Content-Disposition", "attachment;filename=" +
URLEncoder.encode(fileName, "UTF-8"));
//文件下载
in = minioClient.getObject(
GetObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.build());
IOUtils.copy(in, response.getOutputStream());
} catch (Exception e) { //log.error(e.getMessage());
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
//log.error(e.getMessage());
System.out.println("错误信息:"+e.getMessage());
}
}
}
}
访问 http://localhost:8080/download/1_1652435044658.jpg 跟上文件名
访问下载成功
删除接口
@RequestMapping("/delete/{fileName}")
public String delete(@PathVariable("fileName") String fileName) {
try {
minioClient.removeObject(
RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build());
} catch (Exception e) {
//log.error(e.getMessage());
return "删除失败";
}
return "删除成功";
}
删除一个文件地址
http://localhost:8080/delete/1_1652435044658.jpg
再次查看文件
删除成功