https://docs.min.io/官方文档
下载后启动,例如我的:.\minio.exe server F:\tools\minio
启动成功后如下显示,里面包含控制台访问接口,用户名密码

其他的先不说了,下面直接最简单的使用方式贴出来。
基于springboot的依赖,java的额可以参考文档
<!-- minio -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.0.2</version>
</dependency>
配置类
/**
* minio配置类,这三个信息可以在启动成功后窗口上获取
* @author Administrator
*
*/
@Data
@Configuration
public class MinioConfig {
private final static String endpoint="http://127.0.0.1:9000";
private final static String accessKey="minioadmin";
private final static String secretKey="minioadmin";
@Bean
public MinioClient getMinioClient() throws InvalidEndpointException, InvalidPortException {
MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
return minioClient;
}
}
使用案例
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.PutObjectOptions;
import io.minio.Result;
import io.minio.errors.ErrorResponseException;
import io.minio.errors.InsufficientDataException;
import io.minio.errors.InternalException;
import io.minio.errors.InvalidBucketNameException;
import io.minio.errors.InvalidExpiresRangeException;
import io.minio.errors.InvalidResponseException;
import io.minio.errors.RegionConflictException;
import io.minio.errors.XmlParserException;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
@RestController
@RequestMapping("/test")
public class MinioController {
@Autowired
MinioClient minioClient;
/**
* 判断是否存在bucket,不存在就创建
* @return
* @throws InvalidKeyException
* @throws ErrorResponseException
* @throws IllegalArgumentException
* @throws InsufficientDataException
* @throws InternalException
* @throws InvalidBucketNameException
* @throws InvalidResponseException
* @throws NoSuchAlgorithmException
* @throws XmlParserException
* @throws IOException
* @throws RegionConflictException
*/
@GetMapping("/bucketExist")
public boolean bucketExist() throws InvalidKeyException, ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidResponseException, NoSuchAlgorithmException, XmlParserException, IOException, RegionConflictException {
boolean exists = minioClient.bucketExists("pdf");
if(!exists) {
minioClient.makeBucket("pdf");
}
return exists;
}
/**
* 获取所有bucket名称
* @return
* @throws InvalidKeyException
* @throws ErrorResponseException
* @throws IllegalArgumentException
* @throws InsufficientDataException
* @throws InternalException
* @throws InvalidBucketNameException
* @throws InvalidResponseException
* @throws NoSuchAlgorithmException
* @throws XmlParserException
* @throws IOException
*/
@GetMapping("/listBuckets")
public List<String> listBuckets() throws InvalidKeyException, ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidResponseException, NoSuchAlgorithmException, XmlParserException, IOException{
List<Bucket> list = minioClient.listBuckets();//获取所有bucket
List<String> nameList = new ArrayList<String>();
list.forEach(each->{
nameList.add(each.name());
});
return nameList;
}
/**
* 获取某个bucket下面的所有文件名称
* @return
* @throws XmlParserException
* @throws JsonParseException
* @throws InvalidKeyException
* @throws JsonMappingException
* @throws ErrorResponseException
* @throws IllegalArgumentException
* @throws InsufficientDataException
* @throws InternalException
* @throws InvalidBucketNameException
* @throws InvalidResponseException
* @throws NoSuchAlgorithmException
* @throws IOException
*/
@GetMapping("/listObjects")
public List<String> listObjects() throws XmlParserException, JsonParseException, InvalidKeyException, JsonMappingException, ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidResponseException, NoSuchAlgorithmException, IOException {
List<String> nameList = new ArrayList<String>();
Iterable<Result<Item>> listObjects = minioClient.listObjects("picture");
for (Result<Item> result : listObjects) {
Item item = result.get();
nameList.add(item.objectName());
}
return nameList;
}
/**
* 本地文件上传
* @param bucketName bucket名称
* @param objectName 文件名
* @param filename 文件地址
* @param options
* @throws InvalidKeyException
* @throws ErrorResponseException
* @throws IllegalArgumentException
* @throws InsufficientDataException
* @throws InternalException
* @throws InvalidBucketNameException
* @throws InvalidResponseException
* @throws NoSuchAlgorithmException
* @throws XmlParserException
* @throws IOException
*/
@GetMapping("/uploadFile1")
public void uploadLocalFile() throws InvalidKeyException, ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidResponseException, NoSuchAlgorithmException, XmlParserException, IOException {
minioClient.putObject("picture", "测试文档-文本", "C:\\Users\\Administrator\\Desktop\\测试文档-文本.txt", null);
}
/**
* 文件上传
* @param file
* @throws InvalidKeyException
* @throws ErrorResponseException
* @throws IllegalArgumentException
* @throws InsufficientDataException
* @throws InternalException
* @throws InvalidBucketNameException
* @throws InvalidResponseException
* @throws NoSuchAlgorithmException
* @throws XmlParserException
* @throws IOException
*/
@GetMapping("/uploadFile2")
public void uploadFile(MultipartFile file) throws InvalidKeyException, ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidResponseException, NoSuchAlgorithmException, XmlParserException, IOException {
InputStream is = file.getInputStream();
String fileName = file.getOriginalFilename();
minioClient.putObject("pdf", fileName, is, new PutObjectOptions(is.available(), -1));
is.close();
}
/**
* 移除指定bucket下面的文件
* @throws InvalidKeyException
* @throws ErrorResponseException
* @throws IllegalArgumentException
* @throws InsufficientDataException
* @throws InternalException
* @throws InvalidBucketNameException
* @throws InvalidResponseException
* @throws NoSuchAlgorithmException
* @throws XmlParserException
* @throws IOException
*/
@GetMapping("/removeObject")
public void removeObject() throws InvalidKeyException, ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidResponseException, NoSuchAlgorithmException, XmlParserException, IOException {
minioClient.removeObject("picture", "测试文档-文本");
}
/**
* 移除指定bucket
* @throws InvalidKeyException
* @throws ErrorResponseException
* @throws IllegalArgumentException
* @throws InsufficientDataException
* @throws InternalException
* @throws InvalidBucketNameException
* @throws InvalidResponseException
* @throws NoSuchAlgorithmException
* @throws XmlParserException
* @throws IOException
*/
@GetMapping("/removeBucket")
public void removeBucket() throws InvalidKeyException, ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidResponseException, NoSuchAlgorithmException, XmlParserException, IOException {
Iterable<Result<Item>> listObjects = minioClient.listObjects("pdf");
for (Result<Item> result : listObjects) {
Item item = result.get();
minioClient.removeObject("pdf", item.objectName());
}
//minioClient.removeObjects("pdf", nameList);
minioClient.removeBucket("pdf");//直接移除不成功,必须删掉bucket下面的所有文件
}
/**
* 获取文件下载地址
* @return
* @throws InvalidKeyException
* @throws ErrorResponseException
* @throws IllegalArgumentException
* @throws InsufficientDataException
* @throws InternalException
* @throws InvalidBucketNameException
* @throws InvalidExpiresRangeException
* @throws InvalidResponseException
* @throws NoSuchAlgorithmException
* @throws XmlParserException
* @throws IOException
*/
@GetMapping("/presignedGetObject")
public String presignedGetObject() throws InvalidKeyException, ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidExpiresRangeException, InvalidResponseException, NoSuchAlgorithmException, XmlParserException, IOException {
String presignedGetObject = minioClient.presignedGetObject("pdf", "测试文档-文本.txt");
return presignedGetObject;
}
/**
* 获取文件流下载文件
* @param response
* @throws InvalidKeyException
* @throws ErrorResponseException
* @throws IllegalArgumentException
* @throws InsufficientDataException
* @throws InternalException
* @throws InvalidBucketNameException
* @throws InvalidResponseException
* @throws NoSuchAlgorithmException
* @throws XmlParserException
* @throws IOException
*/
@GetMapping("/download1")
public void download1(HttpServletResponse response) throws InvalidKeyException, ErrorResponseException, IllegalArgumentException, InsufficientDataException, InternalException, InvalidBucketNameException, InvalidResponseException, NoSuchAlgorithmException, XmlParserException, IOException {
ObjectStat stat = minioClient.statObject("pdf", "测试文档-文本.txt");
response.setContentType(stat.contentType());
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("123.txt", "UTF-8"));
InputStream is = minioClient.getObject("pdf", "测试文档-文本.txt");
IOUtils.copy(is, response.getOutputStream());
is.close();
}
//根据bucket和文件名称获取在线查看地址
@GetMapping("url")
public String getUrl() throws Exception {
String s = minioClient.presignedGetObject("picture","1.jpg");
return s;
}
}
获取地址如下

查看

服务器展示


该博客介绍了如何在SpringBoot应用中集成Minio对象存储服务,包括添加依赖、配置Minio客户端、创建和检查bucket、上传与删除文件、获取文件列表以及预签名下载链接的方法。
1479

被折叠的 条评论
为什么被折叠?



