当前位置: 首页 > news >正文

运用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,快速在项目中应用它的强大功能。

相关文章:

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

在上一篇文章中&#xff0c;我们已经在云服务器中安装并开启了minio服务&#xff0c;本章我们将为大家讲解如何利用程序将文件上传到minio桶中 下面介绍MinIO中的几个核心概念&#xff0c;这些概念在所有的对象存储服务中也都是通用的。 - **对象&#xff08;Object&#xff0…...

C语言 | Leetcode C语言题解之第461题汉明距离

题目&#xff1a; 题解&#xff1a; int hammingDistance(int x, int y) {int s x ^ y, ret 0;while (s) {s & s - 1;ret;}return ret; }...

Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系

理清 Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系 在开发图形界面应用时&#xff0c;特别是在使用 Qt 框架时&#xff0c;开发者可能会接触到多个概念&#xff0c;如 Qt 3D、QtQuick、QtQuick 3D 和 QML。这些术语分别代表了 Qt 中不同的模块或技术&#xff0c;但由于它们的功能…...

软件设计师(软考学习)

数据库技术 数据库基础知识 1. 数据库中的简单属性、多值属性、复合属性、派生属性简单属性&#xff1a;指不能够再分解成更小部分的属性&#xff0c;通常是数据表中的一个列。例如学生表中的“学号”、“姓名”等均为简单属性。 多值属性&#xff1a;指一个属性可以有多个值…...

第一讲:Go语言开发入门:环境搭建与基础语法

文章目录 环境搭建windows环境搭建Mac环境搭建安装GO使用 Homebrew 安装 Go手动下载安装 Go 配置环境变量配置环境变量检查 Go 是否正确安装 验证安装&#xff1a;编写第一个 Go 程序创建 Go 工作区编写 Hello World 程序运行程序编译程序 常用的 Go 命令 Go语言基础语法1. 变量…...

Linux CentOS stream9配置本地yum源

在Linux系统中,yum源配置是一个重要的环节。把系统安装时配置的国外yum源转换为国内yum源,能够帮助系统快速安装软件包。对于网络环境不稳定或无法联网的系统,配置本地yum源,可以让用户在离线状态下也能进行软件包的安装,十分重要。 一、国内源 在使用Linux的日常工作中…...

std::string

std::string是C标准库中的一个基本类模板&#xff0c;专门用于处理字符串。它提供了一个可变长度的字符序列&#xff0c;以及一系列用于字符串操作的方法。std::string是值类型&#xff0c;这意味着当它作为函数参数传递或赋值时&#xff0c;整个字符串数据会被复制。 std::st…...

【Docker】03-自制镜像

1. 自制镜像 2. Dockerfile # 基础镜像 FROM openjdk:11.0-jre-buster # 设定时区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 拷贝jar包 COPY docker-demo.jar /app.jar # 入口 ENTRYPOINT ["ja…...

Java GC 分类,8和9使用的哪种?

Java的垃圾收集器&#xff08;Garbage Collector, GC&#xff09;负责自动管理内存&#xff0c;回收不再使用的对象所占用的空间。随着JVM的发展&#xff0c;出现了多种不同特性的垃圾收集器来适应不同的应用场景和性能需求。在Java 8中&#xff0c;主要有以下几种垃圾收集器&a…...

【Docker从入门到进阶】01.介绍 02.基础使用

1. 介绍 1.1. 什么是 Docker Docker 是一个开源的平台&#xff0c;用于开发、发布和运行应用程序。它使开发者能够以更精简的方式封装应用及其依赖&#xff0c;做到“打包一次&#xff0c;到处运行”。通过 Docker&#xff0c;您可以创建轻量级、可移植的容器&#xff0c;每个…...

GraphRAG-Local-UI - 基于 GraphRAG 支持本地的聊天UI

文章目录 一、关于 GraphRAG-Local-UI &#x1f578;️特点&#x1f31f;&#x1f5fa;️路线图最近更新即将推出的功能 二、&#x1f4e6;安装和设置三、使用入门&#x1f680;1、创建索引目录2、添加示例数据&#xff08;可选&#xff09;3、初始化索引文件夹4、配置设置5、定…...

Java 根据字符生成背景透明的图片

上代码 package com.example.demotest.controller;/*** Author shaolin* Date 2024-10-08 10:11**/import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; impor…...

树莓派3b安装ubuntu18.04服务器系统server配置网线连接

下载ubuntu镜像网址 img镜像&#xff0c;即树莓派官方烧录器使用的镜像网址 ubuntu18.04-server&#xff1a;ARM/RaspberryPi - Ubuntu Wiki 其他版本&#xff1a;Index of /ubuntu/releases 下载后解压即可。 发现使用官方烧录器烧录配置时配置wifi无论如何都不能使用&am…...

【AIGC】2022-NIPS-视频扩散模型

2022-NIPS-Video Diffusion Models 视频扩散模型摘要1. 引言2. 背景3. 视频扩散模型3.1. 重建引导采样以改进条件生成 4. 实验4.1. 无条件视频建模4.2. 视频预测4.3. 文本条件视频生成4.3.1 视频与图像建模的联合训练4.3.2 无分类器指导的效果4.3.3 更长序列的自回归视频扩展 5…...

从零开始构建:Python自定义脚本自动化你的日常任务

从零开始构建&#xff1a;Python自定义脚本自动化你的日常任务 Python 作为一种简洁且功能强大的编程语言&#xff0c;被广泛应用于各种自动化任务中。通过编写 Python 脚本&#xff0c;你可以轻松地将日常重复性工作自动化&#xff0c;例如文件操作、数据处理、网络爬虫、系统…...

【python实操】python小程序之对象的属性操作

引言 python小程序之对象的属性操作 文章目录 引言一、对象的属性操作1.1 题目1.2 代码1.3 代码解释 二、思考2.1 添加属性2.2 获取属性 一、对象的属性操作 1.1 题目 给对象添加属性 1.2 代码 class Cat:# 在缩进中书写⽅法def eat(self):# self 会⾃动出现,暂不管print(f…...

HCIP——网络类型及数据链路层协议

目录 网络类型的分类 数据链路层协议 MA网络 以太网协议 P2P网络 HDLC---高级数据链路控制协议 HDLC网络搭建 PPP---点到点协议 PPP协议的优点 PPP数据帧封装结构​编辑 PPP会话的搭建 路建立阶段---LCP建立 认证阶段 PAP CHAP 网络层协议协商阶段---NCP协商 网…...

数据结构——栈与队列的实现(全码)

一 栈的概念 栈是一种特殊的线性表&#xff0c;栈内数据遵循先进后出(LIFO)的原则&#xff0c;对于栈&#xff0c;只能在同一侧进行入栈和出栈操作。 入栈操作和出栈操作是在栈的同一侧进行的&#xff0c;如图示&#xff1a; 对于栈这种数据类型&#xff0c;我们可以采用链表或…...

MacOS编译和安装Poco库的方法

1.从官网git下载最新的poco源代码 在/usr/local路径下创建Poco文件夹&#xff0c;克隆Poco源代码 sudo git clone -b poco-1.13.3-release https://github.com/pocoproject/poco.git2.等了一会后&#xff0c;报错啦&#xff01;&#xff01;&#xff01; error: RPC failed…...

医院管理新境界:Spring Boot技术突破

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...