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

在上一篇文章中,我们已经在云服务器中安装并开启了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`)的所有内容。

{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"AWS": ["*"]},"Action": ["s3:GetObject"],"Resource": ["arn:aws:s3:::doctorimg/*"]}]
}

 然后再次访问

Java程序整合minio

MinIO提供了多种语言的SDK供开发者使用,本项目需要用到Java SDK,下面通过一个简单案例熟悉一下其基本用法,具体内容可参考[官方文档](https://www.minio.org.cn/docs/minio/linux/developers/java/minio-java.html#)。

1. **创建一个Maven项目**

2. **引入如下依赖**

   <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.3</version></dependency>

 注意  在此时很有可能会报依赖不兼容的错误

我自己也查询了许多资料,如果你是大佬,那你可以梳理清楚,各依赖相互兼容的关系,当我没说,如果你是小白,可以参考我的方法:在引入两个与其配套的底层依赖

 <!--minio--><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>${minio.version}</version></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>${okhttp3.version}</version> <!-- 或者尝试更低版本 --></dependency><dependency><groupId>com.squareup.okio</groupId><artifactId>okio</artifactId><version>${okio.version}</version></dependency><minio.version>8.5.3</minio.version><okhttp3.version>4.8.1</okhttp3.version><okio.version>2.8.0</okio.version>

3. **编写如下内容**

package com.example.minio;import io.minio.*;
import io.minio.errors.MinioException;import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;public class testminio {public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeyException {try {// 构造 MinIO Client 实例,用于连接 MinIO 服务器// MinioClient.builder() 是 MinIO 客户端的构建器模式,使用 endpoint() 方法设置服务器地址// 使用 credentials() 方法设置访问凭证(用户名和密码)MinioClient minioClient = MinioClient.builder().endpoint("http://211.159.166.206:9000") // MinIO 服务器地址,包含 IP 和端口.credentials("admin", "12345678")        // 设置 MinIO 访问的用户名和密码.build();// 检查是否已经存在名为 doctorimg 的桶(bucket)boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("doctorimg").build());if (!found) {// 如果桶不存在,则创建一个名为 doctorimg 的桶minioClient.makeBucket(MakeBucketArgs.builder().bucket("doctorimg").build());// 设置桶的访问权限为公开,允许所有用户进行 GetObject 操作(即可以读取桶中的对象)// 设置桶策略的 JSON 格式,允许所有用户访问 doctorimg 桶中的对象String policy = "{\n" +"  \"Statement\" : [ {\n" +"    \"Action\" : \"s3:GetObject\",\n" +"    \"Effect\" : \"Allow\",\n" +"    \"Principal\" : \"*\",\n" +"    \"Resource\" : \"arn:aws:s3:::doctorimg/*\"\n" +"  } ],\n" +"  \"Version\" : \"2012-10-17\"\n" +"}";// 将设置的策略应用到 doctorimg 桶上minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket("doctorimg").config(policy).build());} else {// 如果桶已经存在,打印提示信息System.out.println("Bucket 'doctorimg' already exists.");}// 上传文件到 MinIO 的 doctorimg 桶中// 使用 UploadObjectArgs.builder() 方法构建上传参数// bucket() 设置目标桶名// object() 设置文件在桶中的名称// filename() 设置要上传的文件的本地路径minioClient.uploadObject(UploadObjectArgs.builder().bucket("doctorimg")               // 上传到的桶名.object("37.jpg")                  // 文件在桶中存储时的名称.filename("F:\\hospitalsystem\\upload\\doctor_img\\37.jpg") // 本地文件的绝对路径.build());// 文件上传成功后,打印提示信息System.out.println("上传成功");} catch (MinioException e) {// 捕获 MinIO 客户端异常并打印错误信息System.out.println("Error occurred: " + e);}}
}

   运行上述代码,然后查看MinIO管理页面,观察是否上传成功。

注意

 String policy = "{\n" +"  \"Statement\" : [ {\n" +"    \"Action\" : \"s3:GetObject\",\n" +"    \"Effect\" : \"Allow\",\n" +"    \"Principal\" : \"*\",\n" +"    \"Resource\" : \"arn:aws:s3:::doctorimg/*\"\n" +"  } ],\n" +"  \"Version\" : \"2012-10-17\"\n" +"}";

此段代码表示设置权限,不同jdk版本对支持不同类型,jdk8只支持json,但jdk22支持文本类型,大家可以用文心一言生成适合你版本的类型

希望本篇博客能帮助你从入门到精通Minio,快速在项目中应用它的强大功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440950.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

六、索引的数据结构

文章目录 1. 为什么使用索引2. 索引及其优缺点2.1 索引概述2.2 优点2.3 缺点3. InnoDB中索引的推演3.1 索引之前的查找3.1.1 在一个页中的查找3.1.2 在很多页中查找3.2 设计索引3.2.1 一个简单的索引设计方案3.2.2 InnoDB中的索引方案3.3 常见索引概念3.3.1 聚簇索引3.3.2 二级…

Linux相关概念和易错知识点(12)(命令行参数、环境变量、本地变量)

1.命令行参数 &#xff08;1&#xff09;main函数的参数int argc和char* argv[]是什么&#xff1f; main函数可以带参数&#xff0c;即int main(int argc, char* argv[])&#xff0c;(int argc, char* argv[])叫做命令行参数列表&#xff0c;int argc叫参数的个数&a…

RL_足球教练

文章目录 前言什么是 Agent?定义Agent的组成部分Agent的目标 什么是 End-to-End Approach?定义特点优势与挑战示例 Fuzzy Bayesian Reinforcement Learning (RB-RL)系统组成部分系统工作原理 贝叶斯方法基础_条件概率定义 贝叶斯定理示例敏感性 Q-learning强化学习算法Q-lear…

Pandas -----------------------基础知识(八)

Pandas内置Matplotlib 加载数据 import pandas as pdanscombe pd.read_csv(/root/pandas_code_ling/data/e_anscombe.csv) anscombe dataset_1 anscombe[anscombe[dataset]I] dataset_1dataset_1.describe() 提供数据 dataset_1 anscombe[anscombe[dataset]I] dataset_2 an…

【SQL】DDL语句

文章目录 1.SQL通用语法2.SQL的分类3.DDL3.1数据库操作3.2 表操作3.2.1 表操作--数据类型3.2.2 表操作--修改3.2.3 表操作--删除 SQL 全称 Structured Query Language&#xff0c;结构化查询语言。操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库统一标准 。…

C++模板编程:深入理解分离编译的挑战与解决方案

文章目录 前言&#x1f34e;一、非类型模板参数1.1 基本概念1.2 非类型模板参数的语法1.3 非类型模板参数的限制1.4 非类型模板参数的应用1.5 typename关键字 &#x1f34e;二、类模板特化2.1 类模板特化的基本概念2.2 类模板特化的限制和规则2.3 类模板特化的应用 &#x1f34…

输电线路缺陷图像检测数据集,导线散股,塔材锈蚀两类,分别为581张和1407张,标注为xml和txt格式 1988张

输电线路缺陷图像检测数据集&#xff0c;分为导线散股&#xff0c;塔材锈蚀两类&#xff0c;分别为581张和1407张&#xff0c;标注为xml和txt格式 数据集名称 输电线路缺陷图像检测数据集 (Transmission Line Defect Detection Dataset) 数据集概述 该数据集是一个专门用于训…

查看 git log的过程中看到 :说明日志输出可能超出屏幕大小,系统进入了分页模式

在命令行提示符中&#xff0c;通常 : 表示系统等待进一步的输入。如果你在查看 git log 的过程中看到 :&#xff0c;说明日志输出可能超出屏幕大小&#xff0c;系统进入了分页模式&#xff0c;默认使用 less 命令查看内容。 此时你可以&#xff1a; 按 q 退出日志查看。按 En…

【图像处理】多幅不同焦距的同一个物体的平面图象,合成一幅具有立体效果的单幅图像原理(一)

合成一幅具有立体效果的单幅图像&#xff0c;通常是利用多个不同焦距的同一物体的平面图像&#xff0c;通过图像处理技术实现的。以下是该过程的基本原理&#xff1a; 1. 立体视觉原理 人眼的立体视觉是通过双眼观察物体的不同视角而获得的。两只眼睛的位置不同&#xff0c;使…

SSH -L 代理与反向代理转发详解

简介&#xff1a;SSH -L 选项用于设置本地端口转发&#xff0c;而反向代理转发则允许远程主机访问本地服务。本文将介绍如何使用 SSH -L 实现本地端口转发和反向代理转发&#xff0c;并提供示例以帮助您理解和应用这些技术。 历史攻略&#xff1a; Centos&#xff1a;设置代理…

百度文心智能体平台开发萌猫科研加油喵

百度文心智能体平台开发萌猫科研加油喵 在科研的道路上&#xff0c;研究生们常常面临着巨大的压力和挑战。为了给这个充满挑战的群体带来一些鼓励和温暖&#xff0c;我借助百度文心智能体平台开发了一个独特的智能体 《萌猫科研加油喵》。 一、百度文心智能体平台介绍 百度文…

设计模式之适配器模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、适配器模式2、适配器模式的使用场景3、优点4、缺点5、主要角色6、代码示例1&#xff09;UML图2&#xff09;源代码&#xff08;1&#xff09;定义一部手机&#xff0c;它有个typec口。&#xff08;2&#xff09;定义一个vga接口。&#xff08;3&#x…

如何用python抓取豆瓣电影TOP250

1.如何获取网站信息&#xff1f; &#xff08;1&#xff09;调用requests库、bs4库 #检查库是否下载好的方法&#xff1a;打开终端界面&#xff08;terminal&#xff09;输入pip install bs4, 如果返回的信息里有Successfully installed bs4 说明安装成功&#xff08;request…

操作系统 | 学习笔记 | 王道 | 3.1 内存管理概念

3 内存管理 3.1 内存管理概念 3.1.1 内存管理的基本原理和要求 内存可以存放数据&#xff0c;程序执行前需要先放到内存中才能被CPU处理—缓和cpu和磁盘之间的速度矛盾 内存管理的概念 虽然计算机技术飞速发展&#xff0c;内存容量也在不断扩大&#xff0c;但仍然不可能将所有…

Python面向对象基础

文章目录 1. 什么是面向对象1.1 常见的编程思想1.2 面向过程是什么1.3 什么是面向对象1.4 封装1.5 继承1.6 多态 2. 面向对象的概念2.1 两个重要概念&#xff1a;类和对象2.2 类2.3 对象2.4 self关键字 3. 对象属性3.1 什么是属性3.2 类外面访问属性3.3 类内部获取属性 1. 什么…

分治算法(4)_快速选择_库存管理III_面试题

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 分治算法(4)_快速选择_库存管理III_面试题 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f…

esp8266 at指令链接wifi时一直connect disconnest

那是你的连接wifi的名字密码有误或者热点有问题&#xff0c;看看热点是不是把设备拉入黑名单或者设置为5G或者连了校园网或者设置了最多链接设备

sqli-labs靶场第三关less-3

sqli-labs靶场第三关less-3 1、确定注入点 http://192.168.128.3/sq/Less-3/?id1 http://192.168.128.3/sq/Less-3/?id2 有不同回显&#xff0c;判断可能存在注入&#xff0c; 2、判断注入类型 输入 http://192.168.128.3/sq/Less-3/?id1 and 11 http://192.168.128.3/sq/L…

【js逆向学习】极志愿 javascript+python+rpc

JSRPC使用方式 逆向目标逆向过程逆向分析1、什么是 websocket2、websocket的原理3、总体过程3.1 环境说明3.2 python服务端代码3.3 python客户端代码 4、Sekiro-RPC4.1 执行方式4.2 客户端环境4.3 参数说明4.4 SK API4.5 python代码调试4.6 代码注入流程 逆向总结 逆向目标 网…

大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…