Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说开发好物推荐7之对象存储服务Minio,希望能够帮助你!!!。
前言
开发中,一般都会单独的分离出一个文件服务器,存储对象存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。大部分我们还在用FastDFS,我要吐槽几句它部署麻烦,也没有管理界面,所以我推荐另一个对象存储服务Minio,肯定让你眼前一亮,有种相见恨晚的感觉。
推荐理由
docker部署
将MiniIO的数据和配置文件夹挂在到宿主机上
docker run -p 9090:9000 --name minio \
-e MINIO_ACCESS_KEY=admin -e MINIO_SECRET_KEY=123123123 \
-v /mydata/minio/data:/data \
-v /mydata/minio/config:/root/.minio \
-d minio/minio server /data;
# 如果不创建用户名密码,默认用户名密码: minioadmin:minioadmin
访问
springboot 使用minio
1 引入maven
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.0.2</version>
</dependency>
2 配置 application.properties
minio.url= http://192.168.3.189:9090
minio.accessKey= admin
minio.secretKey= 123123123
minio.secure=false
minio.bucketName=test
minio.configDir=/home/data/
3 注入属性
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
// "endPoint是一个URL,域名,IPv4或者IPv6地址"
private String url;
//("accessKey类似于用户ID,用于唯一标识你的账户")
private String accessKey;
//("secretKey是你账户的密码")
private String secretKey;
//("如果是true,则用的是https而不是http,默认值是true")
private Boolean secure;
//("默认存储桶")
private String bucketName;
//("配置目录")
private String configDir;
@Bean
public MinioClient getMinioClient() throws InvalidEndpointException, InvalidPortException {
MinioClient minioClient = new MinioClient(url, accessKey, secretKey,secure);
return minioClient;
}
public String getBucketName() {
return bucketName;
}
public String getConfigDir() {
return configDir;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public Boolean getSecure() {
return secure;
}
public void setSecure(Boolean secure) {
this.secure = secure;
}
public void setBucketName(String bucketName) {
this.bucketName = bucketName;
}
public void setConfigDir(String configDir) {
this.configDir = configDir;
}
}
4 创建工具类
@Component
public class MinioUtil {
@Autowired
private MinioClient minioClient;
/**
* 上传文件
*/
public void uploadFile(InputStream inputStream, String objectName) {
String buckName = "test";
try {
if(!minioClient.bucketExists(buckName)) {
minioClient.makeBucket(buckName);
}
minioClient.putObject(buckName, objectName, inputStream, inputStream.available(), "image/jpeg");
} catch (Exception e) {
e.printStackTrace();
}
}
public void downloadFile(String bucketName, String fileName, String originalName, HttpServletResponse response) {
try {
InputStream file = minioClient.getObject(bucketName, fileName);
String filename = new String(fileName.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 = file.read(buffer)) > 0) {
servletOutputStream.write(buffer, 0, len);
}
servletOutputStream.flush();
file.close();
servletOutputStream.close();
} catch (ErrorResponseException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
5 测试
@RestController
public class GreetingsController {
@Autowired
MinioUtil minioUtil;
@RequestMapping(value = "/{name}", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public String greetingText(@PathVariable String name,HttpServletResponse response) throws FileNotFoundException {
minioUtil.uploadFile(new FileInputStream(new File("C:\\Users\\ctyc\\Desktop\\1.jpg")), "test1.jpg");
minioUtil.downloadFile("test", "test1.jpg", "t1.jpg", response);
return "Hello " + name + "!";
}
}
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章