运用MinIO技能服务器实现文件上传——使用程序上传图片(二 ) ...

打印 上一主题 下一主题

主题 895|帖子 895|积分 2685

在上一篇文章中,我们已经在云服务器中安装并开启了minio服务,本章我们将为大家解说如何使用程序将文件上传到minio桶中
下面先容MinIO中的几个焦点概念,这些概念在所有的对象存储服务中也都是通用的。
   - **对象(Object)**
    对象是实际的数据单位,例如我们上传的一个图片。
  - **存储桶(Bucket)**
    存储桶是用于组织对象的命名空间,类似于文件夹。每个存储桶可以包含多个对象。
  - **端点(Endpoint)**
    端点是MinIO服务器的网络地址,用于访问存储桶和对象,例如`http://192.168.10.101:9000`
      **注意:**
    `9000`为MinIO的API的默认端口,前边设置的`9001`以为管理页面端口。
  - **Access Key 和 Secret Key**
    **Access Key**是用于标识和验证访问者身份的唯一标识符,相当于用户名。
    **Secret Key**是与**Access Key**关联的暗码,用于验证访问者的身份。
  首先

确保你的云服务器中开启了minio服务,然后去浏览器访问IP+PORT举行访问,好比:http://192.168.1.236:9001


在上一篇文章中,我们修改了用户名和暗码,分别为admin   12345678,输入登录即可


另外的一些功能可以参考官方文档,这里指简朴解说
点击创建桶后,输入桶名即可,一些权限默认即可,不必要特别设置

然后去用户中检察

 
minio界面上传文件

 **访问图片**
   - **图片URL**
     由于MinIO提供了HTTP访问功能,所以可以通过浏览器直接访问对象。对象URL为MinIO的`Endpoint`+`对象的存储路径`,例如下图中的图片对象的URL为http://211.159.166.206:9000/doctorimg/37.jpg]
 不出不测的话,使用浏览器访问上述URL,会得到如下响应,很显然是没有访问权限。

若想继续访问图片,必要修改图片**地点桶**的访问权限,如下图所示





若想继续访问图片,必要修改图片**地点桶**的访问权限,
     如上图所示,可选的访问权限共有三个选项,分别是`Private`、`Public`和`Custom`,具体说明如下
        - `Private`
         只允许桶的所有者对该桶举行读写。
       - `Public`
         允许所有人对该桶举行读写。
       - `Custom`
         自定义访问权限。
       若想将权限设置为只允许所有者写,但允许所有人读,就必要自定义访问权限。自定义访问权限,必要使用一个规定格式的JSON字符串举行形貌,具体格式可参考[官方文档]
     例如以下JSON字符串表达的寄义是:允许(`Allow`)所有人(`*`)读取(`s3:GetObject`)指定桶(`doctorimg`)的所有内容。
  1. {
  2.     "Version": "2012-10-17",
  3.     "Statement": [
  4.         {
  5.             "Effect": "Allow",
  6.             "Principal": {
  7.                 "AWS": [
  8.                     "*"
  9.                 ]
  10.             },
  11.             "Action": [
  12.                 "s3:GetObject"
  13.             ],
  14.             "Resource": [
  15.                 "arn:aws:s3:::doctorimg/*"
  16.             ]
  17.         }
  18.     ]
  19. }
复制代码
 然后再次访问


Java程序整合minio
MinIO提供了多种语言的SDK供开发者使用,本项目必要用到Java SDK,下面通过一个简朴案例熟悉一下其根本用法,具体内容可参考[官方文档](https://www.minio.org.cn/docs/minio/linux/developers/java/minio-java.html#)。
1. **创建一个Maven项目**
2. **引入如下依赖**
  1.    <dependency>
  2.        <groupId>io.minio</groupId>
  3.        <artifactId>minio</artifactId>
  4.        <version>8.5.3</version>
  5.    </dependency>
复制代码
 注意  在此时很有可能会报依赖不兼容的错误
我自己也查询了许多资料,如果你是大佬,那你可以梳理清楚,各依赖相互兼容的关系,当我没说,如果你是小白,可以参考我的方法:在引入两个与其配套的底层依赖
  1. <!--minio-->
  2.         <dependency>
  3.             <groupId>io.minio</groupId>
  4.             <artifactId>minio</artifactId>
  5.             <version>${minio.version}</version>
  6.         </dependency>
  7.         <dependency>
  8.             <groupId>com.squareup.okhttp3</groupId>
  9.             <artifactId>okhttp</artifactId>
  10.             <version>${okhttp3.version}</version> <!-- 或者尝试更低版本 -->
  11.         </dependency>
  12.         <dependency>
  13.             <groupId>com.squareup.okio</groupId>
  14.             <artifactId>okio</artifactId>
  15.             <version>${okio.version}</version>
  16.         </dependency>
  17. <minio.version>8.5.3</minio.version>
  18.         <okhttp3.version>4.8.1</okhttp3.version>
  19.         <okio.version>2.8.0</okio.version>
复制代码
3. **编写如下内容**
  1. package com.example.minio;
  2. import io.minio.*;
  3. import io.minio.errors.MinioException;
  4. import java.io.IOException;
  5. import java.security.InvalidKeyException;
  6. import java.security.NoSuchAlgorithmException;
  7. public class testminio {
  8.     public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeyException {
  9.         try {
  10.             // 构造 MinIO Client 实例,用于连接 MinIO 服务器
  11.             // MinioClient.builder() 是 MinIO 客户端的构建器模式,使用 endpoint() 方法设置服务器地址
  12.             // 使用 credentials() 方法设置访问凭证(用户名和密码)
  13.             MinioClient minioClient = MinioClient.builder()
  14.                     .endpoint("http://211.159.166.206:9000") // MinIO 服务器地址,包含 IP 和端口
  15.                     .credentials("admin", "12345678")        // 设置 MinIO 访问的用户名和密码
  16.                     .build();
  17.             // 检查是否已经存在名为 doctorimg 的桶(bucket)
  18.             boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("doctorimg").build());
  19.             if (!found) {
  20.                 // 如果桶不存在,则创建一个名为 doctorimg 的桶
  21.                 minioClient.makeBucket(MakeBucketArgs.builder().bucket("doctorimg").build());
  22.                
  23.                 // 设置桶的访问权限为公开,允许所有用户进行 GetObject 操作(即可以读取桶中的对象)
  24.                 // 设置桶策略的 JSON 格式,允许所有用户访问 doctorimg 桶中的对象
  25.                 String policy = "{\n" +
  26.                         "  "Statement" : [ {\n" +
  27.                         "    "Action" : "s3:GetObject",\n" +
  28.                         "    "Effect" : "Allow",\n" +
  29.                         "    "Principal" : "*",\n" +
  30.                         "    "Resource" : "arn:aws:s3:::doctorimg/*"\n" +
  31.                         "  } ],\n" +
  32.                         "  "Version" : "2012-10-17"\n" +
  33.                         "}";
  34.                
  35.                 // 将设置的策略应用到 doctorimg 桶上
  36.                 minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket("doctorimg").config(policy).build());
  37.             } else {
  38.                 // 如果桶已经存在,打印提示信息
  39.                 System.out.println("Bucket 'doctorimg' already exists.");
  40.             }
  41.             // 上传文件到 MinIO 的 doctorimg 桶中
  42.             // 使用 UploadObjectArgs.builder() 方法构建上传参数
  43.             // bucket() 设置目标桶名
  44.             // object() 设置文件在桶中的名称
  45.             // filename() 设置要上传的文件的本地路径
  46.             minioClient.uploadObject(
  47.                     UploadObjectArgs.builder()
  48.                             .bucket("doctorimg")               // 上传到的桶名
  49.                             .object("37.jpg")                  // 文件在桶中存储时的名称
  50.                             .filename("F:\\hospitalsystem\\upload\\doctor_img\\37.jpg") // 本地文件的绝对路径
  51.                             .build());
  52.             
  53.             // 文件上传成功后,打印提示信息
  54.             System.out.println("上传成功");
  55.         } catch (MinioException e) {
  56.             // 捕获 MinIO 客户端异常并打印错误信息
  57.             System.out.println("Error occurred: " + e);
  58.         }
  59.     }
  60. }
复制代码
   运行上述代码,然后检察MinIO管理页面,观察是否上传成功。
注意
  1. String policy = "{\n" +
  2.                         "  "Statement" : [ {\n" +
  3.                         "    "Action" : "s3:GetObject",\n" +
  4.                         "    "Effect" : "Allow",\n" +
  5.                         "    "Principal" : "*",\n" +
  6.                         "    "Resource" : "arn:aws:s3:::doctorimg/*"\n" +
  7.                         "  } ],\n" +
  8.                         "  "Version" : "2012-10-17"\n" +
  9.                         "}";
复制代码
此段代码表示设置权限,不同jdk版本对支持不同范例,jdk8只支持json,但jdk22支持文本范例,大家可以用文心一言天生适合你版本的范例
盼望本篇博客能帮助你从入门到精通Minio,快速在项目中应用它的强盛功能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

玛卡巴卡的卡巴卡玛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表