全世界增长最快的对象存储系统
MinIO生产部署涵盖了全球。 作为全球使用最多和下载量最大的对象存储服务系统, 它的影响力在与日俱增 - 由非凡的贡献者和传播者社区提供支持。
特点 :
高性能 : 标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。 对象存储可以充当主存储层,以处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。
可扩展性:MinIO利用了Web缩放器的来之不易的知识,为对象存储带来了简单的缩放模型。 这是我们坚定的理念 “简单可扩展.” 在 MinIO, 扩展从单个群集开始,该群集可以与其他MinIO群集联合以创建全局名称空间, 并在需要时可以跨越多个不同的数据中心。 通过添加更多集群可以扩展名称空间, 更多机架,直到实现目标。
云的原生支持:MinIO 是在过去4年的时间内从0开始打造的一款软件 ,符合一切原生云计算的架构和构建过程,并且包含最新的云计算的全新的技术和概念。 其中包括支持Kubernetes 、微服和多租户的的容器技术。使对象存储对于 Kubernetes更加友好。
官方文档:http://www.minio.org.cn/
使用 docker 快速使用 ,非常方便,不会docker的请看教程 Docker 教程
docker pull minio/minio
拉取minio文档版的镜像文件,拉取好了之后直接查看:
docker images
启动minio:
docker run -p 9000:9000 minio/minio server /data
启动成功后,如果是服务器上面那么就放开9000端口 ,外网访问 ip加端口访问,如果看到minio的登录页面那么就成功了。
默认登录用户和密码,在启动的时候就提示了 : minioadmin/minioadmin 默认的用户名和密码。
Minio java sdk 官方参考文档
先详细的查看官方文档,已经对接的api接口,官方demo,参数等,使用一个技术之前,先了解他。
pom加入依赖:
io.minio
minio
7.0.2
MinioClient 是minio java客户端连接服务器已经操作 minio的一个核心类,大部分的功能都是基于这个类来实现的,所以我们看这个类中的方法就可以了。
yml配置:
minio:
endpoint: http://139.196.140.243:9000/ //
accessKey: minioadmin //登录的
secretKey: minioadmin //登录的
bucket: backet //minio服务创建的捅
代码操作:
@Autowired
MinioConfig minioConfig;
/**
* 上传文件:
*/
public String uploadedFile() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException, RegionConflictException {
try{
MinioClient minioClient = init();
boolean bucketExists = minioClient.bucketExists(minioConfig.getBucket());
//判断捅是否存在,如果不存在那么就创建捅:
if(!bucketExists){
minioClient.makeBucket(minioConfig.getBucket());
}
File file = new File("spring-boot-minio-integrat/1122.png");
FileInputStream fileInputStream = new FileInputStream(file);
PutObjectOptions putObjectOptions = new PutObjectOptions(fileInputStream.available(), -1);
//这里根据不同文件 设置不同的 contentype 请看参考文档 https://tool.oschina.net/commons/
//默认设置的是 application/octet-stream 下载文件。
putObjectOptions.setContentType(getMimeType(file.getPath()));
// Map headers = new HashMap<>();
// headers.put("Content-Type",getMimeType(file.getPath()));
// putObjectOptions.setHeaders(headers);
minioClient.putObject(minioConfig.getBucket(),file.getName(), fileInputStream,putObjectOptions);
System.out.println("上次文件成功!");
/**
* 成功后 生成一个可以访问的url
*/
String url = minioClient.getObjectUrl(minioConfig.getBucket(),file.getName());
//获取到url 直接入库存在线的链接就ok了
return url;
}catch (InvalidEndpointException | InvalidPortException e) {
e.printStackTrace();
}
return "";
}
/**
* 初始化
* @return
* @throws InvalidPortException
* @throws InvalidEndpointException
*/
public MinioClient init() throws InvalidPortException, InvalidEndpointException {
MinioClient minioClient = new MinioClient(minioConfig.getEndpoint(),minioConfig.getAccessKey(),minioConfig.getSecretKey());
return minioClient;
}
/**
* 获取文件中的 MimeType
* @param fileUrl
* @return
*/
public String getMimeType(String fileUrl)
{
FileNameMap fileNameMap = URLConnection.getFileNameMap();
String type = fileNameMap.getContentTypeFor(fileUrl);
return type;
}
1.创建捅的时候。没有设置策略,这就导致分享的文件只能是下载,无法在浏览器中打开就浏览,
创建捅,填写捅的名字后直接回车 : test ,创建成功后,设置策略
点击add 这表示所有文件都支持读和写的策略,这样上传上去的文件,在分享的时候,在浏览器上就能做到预览。
这样分享的文件有时间限制,最大是7天,7天后就无法访问。
2.getObjectUrl 方法生成在线文件链接,永久有效.
在上面的代码中就能看到,我上传后,立马把当前文件生成了在线访问的文件,但是这样有一个问题,在
浏览器中访问是直接下载的。http://139.196.140.243:9000/backet/1122.png
但是我用img 标签来显示就正常显示了。
显示正常了。
这个方法是一个重载的方法,基本的参数就是
bucketName : 上传的捅名称
objectName : 上传成功的文件名字
filename : 上传的文件路径 InputStream : 可以通过流的方式上传文件
PutObjectOptions : 设置 Content-Type map等参数
在默认的情况下 Content-Type 设置的 是 application/octet-stream 下载,所以上传的时候我们要区分文件设置不同的 Content-Type 请看参考文档 : https://tool.oschina.net/commons/
在代码中我也处理过这个问题了 URLConnection 来做。
源码:
if (options.contentType().equals("application/octet-stream")) {
String contentType = Files.probeContentType(filePath);
if (contentType != null && !contentType.equals("")) {
options.setContentType(contentType);
}
}
其他好玩的,请自行读文档,调试开发,实例代码在github上面需要的请自行拉取:spring-boot-integrate 然后后续会集成更多的模块进去,需要请点个star。