minio的原理、部署、操作方法(十分钟精通MinIO)
作者:周盛欢
一、认识MinIO
Minio是一个简单易用的云存储服务,就像是一个放在网络上的大文件柜。想象一下,你有一间放满了各种文件的房间,有时候你需要把这些文件分享给朋友或者在不同地方访问它们。Minio就是帮你做到这一点的工具,它让你可以轻松地把文件上传到互联网上,这样无论你在哪里,只要有网络,就能访问或分享这些文件。
现在,如果你想要从这个仓库里取出一张图片或一段视频,让网站的访客能看到或者下载,Minio和网站之间就需要配合完成几个步骤:
1. 上传文件:首先,你通过Minio提供的接口或者工具,把视频或图片上传到Minio的服务器上。上传时,你可以设置一些额外的信息,告诉Minio这些文件是可以被公开访问的。
2. 生成链接:当你要在网站上展示这些文件时,Minio能生成一个特殊的网址(我们叫做对象URL)。这个链接直接指向存储在Minio中的视频或图片。关键在于,这个链接可以设置一个有效期,过了时间就失效,保证安全性。
3. 前端显示:网站的前端代码(就是浏览器能看到的部分)会用这个链接去请求Minio服务器上的视频或图片。当浏览器收到这些文件时,如果它们是图片,就会直接显示在页面上;如果是视频,则会在页面上嵌入一个播放器让用户观看。
4. 下载功能:对于下载来说,其实也很简单。因为前端已经有了这个文件的直接链接,用户点击“下载”按钮时,浏览器就会使用这个链接开始下载文件到用户的电脑上,就像平时在网上下载东西一样。
二、部署MinIO
1.拉取最新的minio镜像
docker pull minio/minio
2.启动minio
docker run -p 9000:9000 -p 9090:9090 \ --name minio \ -d --restart=always \ -e "MINIO_ACCESS_KEY=minio" \ -e "MINIO_SECRET_KEY=minio123" \ -v /Users/zhouchenghuan/mydata/minio/data:/data \ minio/minio server \ /data --console-address ":9090" -address ":9000"
端口9000是api地址,9090是后台管理界面地址。
账号密码、映射文件地址根据自己情况设定。
3.测试
进入minio管理界面,看到这个页面就说明你成功啦~
http://localhost:9090
三、在springboot中集成minio
1.添加minio的依赖
<!--minio依赖--> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.1.0</version> </dependency>
2.创建minio客户端
public static String uploading(String filePath) throws Exception { //3.将图片上传至minio //3.1.创建minio链接客户端 FileInputStream fileInputStream = null; fileInputStream = new FileInputStream(filePath); MinioClient minioClient = MinioClient.builder().credentials("minio", "minio123") .endpoint("http://localhost:9000").build(); //3.2上传 String fileName = new File(filePath).getName(); // 检查文件名是否有效 if (fileName == null || fileName.isEmpty()) { throw new IOException("无效的文件名"); } String objectName = fileName; // 使用原始文件名作为对象名 PutObjectArgs putObjectArgs = PutObjectArgs.builder() .object(objectName)//文件名 .contentType("text/html/png/jpg")//文件类型 .bucket("image")//桶名词 与minio创建的名词一致 .stream(fileInputStream, fileInputStream.available(), -1) //文件流 .build(); minioClient.putObject(putObjectArgs); //设置 Minio 存储桶(bucket)的访问策略(Policy) String bucketPolicy = "{" + " \"Version\": \"2012-10-17\"," + " \"Statement\": [" + " {" + " \"Effect\": \"Allow\"," + " \"Principal\": \"*\"," + " \"Action\": [\"s3:GetObject\"]," + " \"Resource\": [\"arn:aws:s3:::" + "image" + "/*\"]" + " }" + " ]" + "}"; //设置为公开 minioClient.setBucketPolicy("image",bucketPolicy); // 得到一个长期链接 返回给前端用于渲染 String downloadUrl = minioClient.getObjectUrl("image", objectName); System.out.println("长期链接" + downloadUrl); //删除临时文件 // 判断文件是否存在 if(Files.exists(Paths.get(filePath))) { try { // 删除文件 Files.delete(Paths.get(filePath)); System.out.println("临时文件删除成功"); } catch (IOException e) { // 异常处理 e.printStackTrace(); } } else { System.out.println("临时文件不存在"); } return downloadUrl; }
3.单元测试
选择本地的一个图片上传
@Test void test() throws Exception { MinioUtility.uploading("/Users/zhouchenghuan/Downloads/hh.png"); }
咱们看到已经成功了,那么咱们就可以将这个地址返回给前端去渲染、下载。
到此这篇关于十分钟精通MinIO:minio的原理、部署、操作的文章就介绍到这了,更多相关minio原理部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!