博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MinIO存储在docker中安装及其使用
阅读量:4165 次
发布时间:2019-05-26

本文共 5772 字,大约阅读时间需要 19 分钟。

MinIO

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL

一、docker 安装Minio

安装docker镜像

# docker安装镜像docker pull minio/minio

容器运行方式① 和 容器运行方式② 选择一种就好。

运行容器方式①

# 后台运行容器docker run -p 9000:9000 --name storage -di -v /storage/data:/data -v /storage/config:/root/.minio --restart=always minio/minio server /data1,进入容器docker exec -it storage sh2,查看配置文件中的key值cat /data/.minio.sys/config/config.json |grep Key“accessKey”: “507LX5P57F99DNEVF1GH”,“secretKey”: “Kc2tllnd9FQrgTzu0RSohir4B4svh2cLiueGZR5x”,“routingKey”: “”,

运行容器方式②

# 后台运行容器方式docker run -p 9000:9000 --name storage -di --restart=always \  -e "MINIO_ACCESS_KEY=superzheng" \  -e "MINIO_SECRET_KEY=storage/File" \  -v /storage/data:/data \  -v /storage/config:/root/.minio \  minio/minio server /data  # -p 端口映射  将外部端口 映射到 容器内部端口  # --name 自定义容器名称# -di 后台运行的方式运行# --restart=always  一旦docker重启或者开启时,也自动启动镜像# -e 设置系统变量  在这里是设置Minio的ACCESS_KEY和SECRET_KEY# -v 挂载文件  将系统文件  映射到  容器内部对应的文件夹

这是安装成功的日志:

更多信息:请访问官网

二、java代码操作

package cn.mesmile.oss.minio;import cn.hutool.core.util.StrUtil;import cn.mesmile.oss.domain.FileInfoResp;import cn.mesmile.oss.exception.BucketNotExistException;import cn.mesmile.oss.exception.ContentTypeException;import cn.mesmile.oss.exception.FileSizeMaxException;import io.minio.MinioClient;import io.minio.Result;import io.minio.messages.DeleteError;import io.minio.policy.PolicyType;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;/** * @author zb * @date 2019/12/15 14:20 * @Description: * Copyright (C),2019,AOSSCI Inc.傲势科技有限公司 *   Endpoint	对象存储服务的URL *   Access key就像用户ID,可以唯一标识你的账户。 *   Secret key是你账户的密码。 */@Componentpublic class FileService {
/** * 对象存储服务的URL, 注意 这里的endpoint填写 url会报错,这里endpoint的值应该为 【 http://ip:端口号 】 的形式 */ @Value("${minio.endpoint}") private String endpoint; /** * 就像用户ID,可以唯一标识你的账户 */ @Value("${minio.access-key}") private String accessKey; /** * 是你账户的密码 */ @Value("${minio.secret-key}") private String secretKey; // 上传的最大限制 10 M private static final long MAX_SIZE =1024*1024*100; /** * 上传图片 * @param bucketName 桶名称 * @param file 文件 * @return * @throws Exception */ public FileInfoResp uploadImage(String bucketName, MultipartFile file) throws Exception{
String contentType = file.getContentType(); // image/png if (!StrUtil.containsAny(contentType,"image")) {
throw new ContentTypeException("文件类型错误,请上传图片文件。"); } return uploadFile(bucketName,file,"image"); } /** * 上传文件 * @param bucketName 桶名 * @param file 文件 * @return * @throws Exception */ public FileInfoResp uploadFile(String bucketName, MultipartFile file) throws Exception {
String contentType = file.getContentType(); return uploadFile(bucketName,file,contentType); } /** * 删除单个文件 * @param bucketName * @param objectName * @return * @throws Exception */ public Iterable
> deleteFileSingle(String bucketName, String objectName) throws Exception {
return deleteFile(bucketName,objectName,null); } /** * 批量删除文件 * @param bucketName 桶名 * @param objectNames 批量路径名称 * @return * @throws Exception */ public Iterable
> deleteFileBath(String bucketName, Iterable
objectNames) throws Exception {
return deleteFile(bucketName,null,objectNames); } /** * 删除桶 * @param bucketName 桶名称 * @throws Exception */ public void deleteBucket(String bucketName) throws Exception {
MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey); if (!minioClient.bucketExists(bucketName)) {
throw new BucketNotExistException("桶不存在"); } minioClient.removeBucket(bucketName); } /** * 删除文件 * @param bucketName 桶的名称 * @param objectName 路径名例: /image/123.jpg * @param objectNames 批量路径名: * @return * @throws Exception */ private Iterable
> deleteFile(String bucketName, String objectName,Iterable
objectNames) throws Exception { MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey); if (!minioClient.bucketExists(bucketName)) { throw new BucketNotExistException("桶不存在"); } if (objectNames != null) { return minioClient.removeObject(bucketName, objectNames); } else { minioClient.removeObject(bucketName, objectName); return null; } } /** * 上传文件 * @param bucketName 桶的名称 * @param file 文件名 * @param prefix 前缀 * @return * @throws Exception */ private FileInfoResp uploadFile(String bucketName, MultipartFile file, String prefix) throws Exception { if (file.getSize() > MAX_SIZE ) { throw new FileSizeMaxException("文件过大,超过限制大小:"+MAX_SIZE/(1024*1024.0)+" M"); } MinioClient minioClient = new MinioClient(endpoint,accessKey,secretKey); minioClient.setBucketPolicy(bucketName,prefix, PolicyType.READ_WRITE); // 检查桶是否存在,若不存在则创建一个 if (!minioClient.bucketExists(bucketName)) { minioClient.makeBucket(bucketName); } InputStream inputStream = file.getInputStream(); String contentType = file.getContentType(); String filename = file.getOriginalFilename(); String objectName = prefix + "/" +filename; // 上传文件 minioClient.putObject(bucketName,objectName,inputStream,contentType); return FileInfoResp.builder() .bucketName(bucketName) .fileName(filename) .objectName(objectName) .contentType(contentType) .prefix(prefix) .url(endpoint + "/" + bucketName + "/" + objectName) .build(); }}

转载地址:http://gqxxi.baihongyu.com/

你可能感兴趣的文章
技术人,不要总在很初级的层面上谈管理
查看>>
CMarkup与tinyXml直接解析XML字符串
查看>>
技术人员也要注重提升软实力
查看>>
优秀程序员的十个习惯
查看>>
一个老程序员对学弟学妹的一些忠告
查看>>
管理者:我不需要你喜欢我
查看>>
程序员赚钱致富的6种方法
查看>>
世界上的编程语言已这么丰富,为什么还不够?
查看>>
想变富?先学学有钱人的10种思维方式!
查看>>
CListCtrl 和 CListBox的设置选中问题
查看>>
什么时候需要定义拷贝构造函数
查看>>
管理时间是空话,集中精力吃青蛙
查看>>
五大绝招助你成为下属爱戴的好上司
查看>>
程序员需谨记的8条团队开发原则
查看>>
程序员提高英语阅读水平
查看>>
Java程序员应该掌握哪些技术
查看>>
从程序员到架构师的方法与逻辑
查看>>
23个设计模式的简明教程
查看>>
Redis错误配置详解
查看>>
WinHex中文版下载 v16.9 汉化破解版
查看>>