Minio使用
MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。它与 Amazon S3 云存储服务
API 兼容。使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。
MinIO是高性能对象存储,什么是对象存储(Object Storage Service),对象存储是支持海量用户远程访问的无限容量廉价存储系统,既然是存储系统。
它由桶(bucket,对应Windows下的文件夹),组成目录结构,桶中直接存放对象(Object,对应
Windwos下的文件),桶中不能再创建通,但是要能创建文件夹
参考官网上的内容,官网地址如下:https://docs.min.io/
Windows使用
一、下载和本地启动MinIO
- 下载MinIO,访问官网:https://docs.min.io/
- 将MinIO.exe 拷贝到自己的目录下去,并创建一个data目录
- 通过命令行启动Minio:minio server ./data
- 启动完成后,可以看到访问的路径 http://127.0.0.1:9000
- 使用提供的账号密码进行登录
账号:minioadmin
密码:minioadmin
说明minio已经正常启动了
二、MioIO的使用
由于我们已经了解到MinIO是由桶(bucket)组成的,相当于是文件夹
对应的应该先要创建通bucket
创建桶:创建名叫huike-crm的桶
先尝试通过MinIO的浏览器上传一个文件,点击copy拷贝生成分享的url
在浏览器里访问,可以看到上传的图片
可以看到图片里的内容,证明minio已经可以正常使用了
但是,存在一些问题,我们生成一个分享url的时候发现有一个有效期
也就是说我们生成的分享的url的有效期只有7天,过了这7天以后再想通过这个url来进行访问就会有问题
那么我们能否直接将上传上来的文件暴露出去,而不再需要通过分享的这个url来进行访问呢?
如果现在我们要直接访问我们的MinIO里的文件要如何访问
我们应该直接访问 Minio的ip+端口/桶名称/文件名
http://172.16.17.121:9000/huike-crm/java.png
我们在浏览器中尝试了一下,看到返回的数据的内容,没有权限
注意这里的权限的配置是在桶这一级别的,添加读取readOnly对应的权限是*即拥有所有权限
然后重新访问java.png,http://127.0.0.1:9000/huike-crm/Snipaste_2022-12-31_17-24-29.png 即可看到图片
Java访问MinIO
官网手册:https://min.io/docs/minio/linux/developers/java/API.html
1.先导入依赖
io.minio minio 8.3.7
2.编写配置
2.1 编写配置文件
yml配置
# Miniio配置minio: # minio服务所在的目标ip endpoint: http://127.0.0.1 # 端口 port: 9000 # 登录时的账户 accessKey: minioadmin # 密码 secretKey: minioadmin # 存储的桶 bucketName: huike-crm
MinIO配置文件
@Data@Component@ConfigurationProperties(prefix = "minio")public class MinioConfig { //ip地址 private String endpoint; //端口号 private int port; //账户名 private String accessKey; //密码 private String secretKey; //默认存储桶 private String bucketName;}
Controller层编写
@RestControllerpublic class CommonController extends BaseController { @Autowired private ISysFileService fileService; @PostMapping("/common/upload") public AjaxResult uploadFile(MultipartFile file) throws Exception { return fileService.upload(file); }}
Service层编写
@Service@Slf4jpublic class SysFileServiceImpl implements ISysFileService { @Autowired private MinioConfig minioConfig; @Override public AjaxResult upload(MultipartFile file) throws Exception { try { //判断文件是否是pdf格式 if (!file.getContentType().equals("application/pdf") ){ return AjaxResult.error("只能上传pdf文件"); } //截取文件后缀然后拼接新的文件名 uuid + 后缀 String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().indexOf(".")); String newFileName = UUID.randomUUID().toString(true) + suffix; //创建Minio的连接对象 MinioClient minioClient = MinioClient.builder() .endpoint(minioConfig.getEndpoint() + ":" + minioConfig.getPort()) .credentials(minioConfig.getAccessKey(), minioConfig.getSecretKey()) .build(); //判断文件存储的桶是否存在 boolean flag = minioClient.bucketExists( BucketExistsArgs.builder().bucket(minioConfig.getBucketName()).build() ); //判断是否存在该桶 if (!flag) { //不存在就创建 minioClient.makeBucket( MakeBucketArgs.builder().bucket(minioConfig.getBucketName()).build() ); } //上传到桶中的文件的路径 使用当前日期作为文件存储路径 String data = new SimpleDateFormat("yyyy/MM/dd").format(new Date()) + "/"; //操作文件,文件上传 minioClient.putObject( PutObjectArgs.builder().bucket(minioConfig.getBucketName()).object(data + newFileName).stream(file.getInputStream(), -1, 10485760).contentType(file.getContentType()).build()); //封装访问的url给前端 http://127.0.0.1:9000/桶名/路径/文件名 String url = minioConfig.getEndpoint() + ":" + minioConfig.getPort() + "/" + minioConfig.getBucketName() + "/" + data + newFileName; //fileName /桶名/路径/文件名 String fileName = "/" + minioConfig.getBucketName() + "/" + data + newFileName; AjaxResult success = AjaxResult.success(); success.put("url",url); success.put("fileName",fileName); return success; } catch (MinioException e) { System.out.println("Error occurred: " + e); System.out.println("HTTP trace: " + e.httpTrace()); } return null; }}
来源地址:https://blog.csdn.net/qq_46062118/article/details/128507023
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341