Minio安装和整合SpringBoot的使用
Minio官网地址:http://docs.minio.org.cn/docs/master/minio-monitoring-guide
拉取镜像
搜索镜像
docker search minio
拉取镜像
docker pull minio/minio
运行镜像
在本地好两个文件例如:
/home/admin/minio/data
/home/admin/mino/config
运行镜像
docker run --name minio -p 9000:9000 -p 9090:9090 -d --restart=always
-e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=admin123"
-v /home/admin/minio/data:/data
-v /home/admin/minio/config:/root/.minio minio/minio server /data
--console-address ":9090" --address ":9000"
这个--console-address
是固定控制台的端口 --address
指定 API的接口
运行好之后可以查看日志得到
浏览器输入localhost:9090
用户名和密码就只上面指定的-e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=admin123"
SpringBoot整合Minio
引入依赖
<!--minio-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.0.2</version>
</dependency>
配置minio地址信息
minio:
url: http://localhost:9000
access_key: admin
secretKey: admin123
配置类
@Component
@ConfigurationProperties(prefix = "minio")
@Data
public class MinioClientConfig {
private String url;
private String accessKey;
private String secretKey;
}
将minio注入到Spring容器中
@Autowired
private MinioClientConfig minioClientConfig;
@Bean
public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
return new MinioClient(minioClientConfig.getUrl(),minioClientConfig.getAccessKey(),minioClientConfig.getSecretKey());
}
minio工具类
@Component
public class MinioUtils {
@Autowired
private MinioClient client;
/**
*
* @param is 文件流
* @param bucketName 桶名称
* @param fileName 文件名称
*/
public void fileUpload(InputStream is,String bucketName,String fileName){
try{
if (is != null) {
//判断桶在不在
if (!client.bucketExists(bucketName)) {
//创建桶
client.makeBucket(bucketName);
}
/**
创建新的 PutObjectOptions 对象。 考虑对象大小时使用 PutObjectOptions 的两种方法。
如果对象大小未知,则将 -1 传递给 objectSize 并传递有效的 partSize。
如果对象大小已知,则将 -1 传递给 partSize 以进行自动检测; 否则通过有效的 partSize 来控制内存使用,没有。 上传的部分。
如果 partSize 大于 objectSize,则 objectSize 用作 partSize。
有效的部分大小介于 5MiB 到 5GiB 之间(包括两个限制)。
*/
client.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
}
}catch (Exception e){
e.printStackTrace();
}finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
*
* @param bucketName 桶名称
* @param fileName 文件名称
*/
public void fileDownload(HttpServletResponse response, String bucketName, String fileName){
try {
ServletOutputStream outputStream = response.getOutputStream();
InputStream is = client.getObject(bucketName, fileName);
int line = 0;
byte[] bytes = new byte[1024];
while((line=is.read(bytes)) != -1){
outputStream.write(bytes,0,line);
}
// response.setHeader("content-Type", "text/html;charset=utf-8");
response.setHeader("content-disposition","attachment;fileName="+fileName);
is.close();
outputStream.flush();
outputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
上传好的文件就可以再桶中查看