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

minio的一个基础使用案例:用户头像上传

文章目录

    • 一、minio下载安装(Windows)
    • 二、案例需求分析
    • 三、后端接口开发

一、minio下载安装(Windows)

1. 下载minio服务端和客户端

minio下载地址

在这里插入图片描述

2. 手动搭建目录

/minio/binmc.exeminio.exe/data/logs
  • 手动创建minio应用程序目录,如:E:\minio\bin
  • 手动创建minio数据目录,如:E:\minio\data
  • 手动创建minio日志目录,如:E:\minio\logs
  • 然后将下载的mc.exe文件和minio.exe文件放入E:\minio\bin目录下

3. 启动

  • 在bin目录下打开cmd

到bin目录下后,在地址栏输入cmd,然后回车

  • 设置用户名
setx MINIO_ROOT_USER minioadmin
  • 设置用户密码
setx MINIO_ROOT_PASSWORD minioadmin
  • 启动minio服务
E:\minio\bin\minio.exe server E:\minio\data --console-address ":9001" --address ":9000" > E:\minio\logs\minio.log

4. 访问minio控制台

  • 在浏览器输入服务器Ip + 9001端口号打开登录页面,然后使用前面步骤中设置的用户名和密码登录控制台

  • 建立一个新的bucket
    在这里插入图片描述

在这里插入图片描述

  • 修改桶的访问权限为public
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、案例需求分析

  • 例如在添加用户和修改用户的时候,此时可以在表单页面点击"+"号,然后选择要上传的用户图像。
    在这里插入图片描述

  • 选择完毕以后,那么此时就会请求后端上传文件接口,将图片的二进制数据传递到后端

  • 后端需要将数据图片存储起来,然后给前端返回图片的访问地址,然后前端需要将图片的访问地址设置给sysUser用户数据模型

  • 当用户点击提交按钮的时候,那么此时就会将表单进行提交,后端将数据保存起来即可

三、后端接口开发

基本目录结构

/java
----/controller
--------FileUploadController.java
----/properties
--------MinioProperties.java
----/service
--------/impl
------------FileUploadServiceImpl.java
--------FileUploadService.java
----ManagerApplication.java
/resources
----application-dev.yml
  • 在application-dev.yml中添加minio相关配置

在这里插入图片描述

# 自定义配置
project:minio:endpointUrl: http://127.0.0.1:9000accessKey: minioadminsecureKey: minioadminbucketName: b2c-e-commerce
  • 新建MinioProperties.java,minio所需参数实体类

在这里插入图片描述

@Data
@ConfigurationProperties(prefix = "project.minio")
public class MinioProperties {private String endpointUrl;private String accessKey;private String secureKey;private String bucketName;
}
  • 修改启动类ManagerApplication,添加@EnableConfigurationProperties注解,激活配置属性绑定功能

在这里插入图片描述

@EnableConfigurationProperties(value = { MinioProperties.class})
  • service层接口及实现类

基本思路:

  1. 在fileUpload方法中,首先根据minioProperties创建一个MinioClient实例,用于与MinIO服务器交互。

  2. 检查指定的桶(bucket)是否存在。如果不存在,则通过makeBucket方法创建一个新的桶。

  3. 生成存储对象的名称:结合当前日期(格式为"yyyyMMdd")和一个随机UUID作为前缀,再加上原始文件名,确保文件名的唯一性。

  4. 使用PutObjectArgs构建上传对象的参数,包括桶名、文件输入流(从MultipartFile获取)、文件大小和对象名称(即文件路径)。

  5. 调用minioClient.putObject执行文件上传操作。
    最后,返回文件在MinIO服务器上的访问URL,以便用户可以访问上传的文件。

FileUploadService.java

public interface FileUploadService {String fileUpload(MultipartFile multipartFile);
}

FileUploadServiceImpl.java

@Service
public class FileUploadServiceImpl implements FileUploadService {@Autowiredprivate MinioProperties minioProperties ;@Overridepublic String fileUpload(MultipartFile multipartFile) {try {// 创建一个Minio的客户端对象MinioClient minioClient = MinioClient.builder().endpoint(minioProperties.getEndpointUrl()).credentials(minioProperties.getAccessKey(), minioProperties.getSecureKey()).build();// 判断桶是否存在boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build());if (!found) {       // 如果不存在,那么此时就创建一个新的桶minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucketName()).build());} else {  // 如果存在打印信息System.out.println("Bucket 'b2c-e-commerce' already exists.");}// 设置存储对象名称String dateDir = DateUtil.format(new Date(), "yyyyMMdd");String uuid = UUID.randomUUID().toString().replace("-", "");//20230801/443e1e772bef482c95be28704bec58a901.jpgString fileName = dateDir+"/"+uuid+multipartFile.getOriginalFilename();System.out.println(fileName);PutObjectArgs putObjectArgs = PutObjectArgs.builder().bucket(minioProperties.getBucketName()).stream(multipartFile.getInputStream(), multipartFile.getSize(), -1).object(fileName).build();minioClient.putObject(putObjectArgs) ;return minioProperties.getEndpointUrl() + "/" + minioProperties.getBucketName() + "/" + fileName ;} catch (Exception e) {throw new RuntimeException(e);}}
}
  • controller层
@RestController
@RequestMapping("/admin/system")
public class FileUploadController {@Autowiredprivate FileUploadService fileUploadService ;@PostMapping(value = "/fileUpload")public Result<String> fileUploadService(@RequestParam(value = "file") MultipartFile multipartFile) {String fileUrl = fileUploadService.fileUpload(multipartFile) ;return Result.build(fileUrl , ResultCodeEnum.SUCCESS) ;}}

相关文章:

minio的一个基础使用案例:用户头像上传

文章目录 一、minio下载安装&#xff08;Windows&#xff09;二、案例需求分析三、后端接口开发 一、minio下载安装&#xff08;Windows&#xff09; 1. 下载minio服务端和客户端 minio下载地址 2. 手动搭建目录 /minio/binmc.exeminio.exe/data/logs手动创建minio应用程序目…...

Linux用户和用户组的管理

目录 前言一、系统环境二、Linux用户组的管理2.1 新增用户组2.2 删除用户组2.3 修改用户组2.4 查看用户组 三、Linux用户的管理3.1 新增用户3.2 删除用户3.3 修改用户3.4 查看用户3.5 用户口令&#xff08;密码&#xff09;的管理 总结 前言 本篇文章介绍如何在Linux系统上实现…...

项目-五子棋双人对战:游戏房间的管理(5)

完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 之前我们已经实现了玩家匹配的功能, 我们都知道, 匹配完过后就可以进入游戏房间进行对战了, 所以我们下一步关注的重点就是对于游戏房间的管理. 模块详细讲解 功能需求 通过匹配的方式, 自动给玩家加入到一个游戏房间…...

LocalDate和Date有什么区别?两者如何转换?

LocalDate与Date 在Java中&#xff0c;LocalDate和Date是用来处理日期的两种不同的类。 区别&#xff1a; Date是Java早期的日期类&#xff0c;它包含了日期和时间的信息。但是在Java 8之后&#xff0c;Date类被标记为过时的&#xff0c;推荐使用新的日期时间API&#xff0c;…...

铝合金货物运输鉴定书办理 货物危险性鉴定

货物运输鉴定书/货物危险性鉴定 项目背景&#xff1a; 为了运输的安全&#xff0c;航空运输、公路运输、铁道运输、水路运输都必须了解货物的运输危险性。货物运输条件鉴定就是对货物的运输适宜性作出评价和建议。 货物运输条件鉴定一般依据IATA危险货物规章(DGR)2005、联合国危…...

php操作数据库

<?php session_start(); #面向过程 function create_connection(){ $conn mysqli_connect(127.0.0.1,root,123456,learn_2) or die("数据库连接失败"); mysqli_query($conn,"set names utf8"); return $conn; } #面向对象 function create_connection…...

python记录之集合

Python中的集合&#xff08;Set&#xff09;是一个无序且不包含重复元素的数据结构。集合主要用于成员检测和数据去重。 1. 集合的创建 在Python中&#xff0c;你可以使用大括号{}或set()函数来创建一个集合。注意&#xff0c;如果你使用大括号{}并且只包含一个元素&#xff…...

ResourceManager 的 rpc server 模型

一. yarn ResourceManager 的三种通信协议 ResourceTrackerProtocol NodeManager 和 ResourceManager 的 RPC 通信协议。其中 ResourceManager 充当RPC Server的角色&#xff0c;而 NodeManager 充当 RPC Client 的角色。NodeManager 通过该协议向 ResourceManager 注册、汇报…...

Java面试八股之什么是自动装箱和自动拆箱

什么是自动装箱和自动拆箱 在Java中&#xff0c;自动装箱&#xff08;Autoboxing&#xff09;和自动拆箱&#xff08;Auto-unboxing&#xff09;是两个与基本数据类型和它们对应的包装类之间的转换相关的特性。这两个概念自Java 5&#xff08;也称为Java SE 5或JDK 5&#xff…...

OrangePi AIpro小试牛刀-目标检测(YoloV5s)

非常高兴参加本次香橙派AI Pro&#xff0c;香橙派联合华为昇腾打造的一款AI推理开发板评测活动&#xff0c;以前使用树莓派Raspberry Pi4B 8G版本&#xff0c;这次有幸使用国产嵌入式开发板。 一窥芳容 这款开发板搭载的芯片是和华为昇腾的Atlas 200I DK A2同款的处理器&#…...

QT案例 记录解决在管理员权限下QFrame控件获取拖拽到控件上的文件路径

参考知乎问答 Qt管理员权限如何支持拖放操作&#xff1f; 的回答和代码示例。 解决在管理员权限运行下&#xff0c;通过窗体的QFrame子控件获取到拖拽的内容。 目录标题 导读解决方案详解示例详细 【管理员权限】在QFrame控件中获取拖拽内容 【管理员权限】继承 IDropTarget 类…...

[HNCTF 2022 WEEK4]flower plus

第一种花指令 第二种花指令 根据两种花指令特征&#xff0c;写出去花指令脚本 saddr0x401000 eaddr0x435000 for i in range(saddr,eaddr):if get_wide_dword(i)0x01740275:print(hex(i),hex(get_wide_dword(i)))patch_byte(i-5,0x90)patch_dword(i-4,0x90909090)patch_dw…...

Mongo常用语法(java代码)

1、根据agentId字段分组&#xff0c;并对totalCustomerNum、refundCustomerNum字段 sum求和&#xff0c;同时取别名 Overridepublic List<AgentCountInfoBean> selectCurrentMonthNewResource(Set<String> orderTypeSet, List<String> agentIds,LocalDateTim…...

go语言后端开发学习(二)——基于七牛云实现的资源上传模块

前言 在之前的文章中我介绍过我们基于gin框架怎么实现本地上传图片和文本这类的文件资源(具体文章可以参考gin框架学习笔记(二) ——相关数据与文件的响应)&#xff0c;但是在我们实际上的项目开发中一般却是不会使用本地上传资源的方式来上传的&#xff0c;因为文件的上传与读…...

探索微软新VLM Phi-3 Vision模型:详细分析与代码示例

引言 在最近的微软Build大会上&#xff0c;微软宣布了许多新内容&#xff0c;其中包括新款Copilot PC和围绕Copilot生态系统的一系列功能。其中最引人注目的是发布了一些新的Phi模型&#xff0c;特别是Phi-3 Vision模型。本文将详细探讨Phi-3 Vision模型的特性&#xff0c;并提…...

如何使用GPT-4o函数调用构建一个实时应用程序?

本教程介绍了如何使用OpenAI最新的LLM GPT-4o通过函数调用将实时数据引入LLM。 我们在LLM函数调用指南(详见https://thenewstack.io/a-comprehensive-guide-to-function-calling-in-llms/)中讨论了如何将实时数据引入聊天机器人和代理。现在&#xff0c;我们将通过将来自Fligh…...

[Vue-常见错误]浏览器显示Uncaught runtime errors

文章目录 错误描述正确写法具体如下 错误描述 当前端代码发生错误时&#xff0c;浏览器中出现以下错误提示。 正确写法 显然这不是我们所期望的&#xff0c;在vue.config.js中配置如下设置关闭Uncaught runtime errors显示 devServer: {client: {overlay: false}具体如下 …...

html常见的表单元素有哪些,html表单元素有哪些?

HTML中常用的表单元素包括&#xff1a;文本区域(TEXTAREA)&#xff0c;列表框(SELECT)&#xff0c;文本输入框(INPUT typetext)&#xff0c;密码输入框(INPUT typepassword)&#xff0c;单选输入框(INPUT typeradio)&#xff0c;复选输入框(INPUT typecheckbox)&#xff0c;重置…...

spring boot sso

代码&#xff1a;https://gitee.com/forgot940629/ssov2 授权服务 登录成功后&#xff0c;session中会存储UsernamePasswordAuthenticationToken&#xff0c;之后每次请求code时都会用UsernamePasswordAuthenticationToken生成OAuth2Authentication&#xff0c;并将OAuth2Aut…...

Keras深度学习框架实战(5):KerasNLP使用GPT2进行文本生成

1、KerasNLP与GPT2概述 KerasNLP的GPT2进行文本生成是一个基于深度学习的自然语言处理任务&#xff0c;它利用GPT-2模型来生成自然流畅的文本。以下是关于KerasNLP的GPT2进行文本生成的概述&#xff1a; GPT-2模型介绍&#xff1a; GPT-2&#xff08;Generative Pre-trained …...

速盾:网站重生之我开了高防cdn

在互联网的广袤海洋中&#xff0c;网站就如同一个个独立的岛屿&#xff0c;面临着各种风雨和挑战。而作为一名专业程序员&#xff0c;我深知网站安全和性能的重要性。当我的网站遭遇频繁的攻击和访问压力时&#xff0c;我毅然决定开启高防 CDN&#xff0c;开启了一场网站的重生…...

【spark】spark列转行操作(json格式)

前言&#xff1a;一般我们列转行都是使用concat_ws函数或者concat函数&#xff0c;但是concat一般都是用于字符串的拼接&#xff0c;后续处理数据时并不方便。 需求&#xff1a;将两列数据按照设备id进行分组&#xff0c;每个设备有多个时间点位和对应值&#xff0c;将其一一对…...

记录一次Linux启动kafka后并配置了本地服务连接远程kafka的地址后依旧连接localhost的问题

问题的原因 我是使用docker来安装并启动kafka 的&#xff0c;所以在启动过程中并没有太多需要配置的地方&#xff0c;基本都是从网上照搬照抄&#xff0c;没动什么脑子&#xff0c;所以看着启动起来了觉得就没事了&#xff0c;但是运行项目的时候发现&#xff0c;我明明已经配…...

MacOS中Latex提示没有相关字体怎么办

在使用mactex编译中文的时候&#xff0c;遇到有些中文字体识别不到的情况&#xff0c;例如遇到识别不到Songti.ttc。其实这个时候字体是在系统里面的&#xff0c;但是只不过是latex没有找到正确的字体路径。 本文只针对于系统已经安装了字体库并且能够用find命令搜到&#xff0…...

物资材料管理系统建设方案(Word)—实际项目方案

二、 项目概述 2.1 项目背景 2.2 现状分析 2.2.1 业务现状 2.2.2 系统现状 三、 总体需求 3.1 系统范围 3.2 系统功能 3.3 用户分析 3.4 假设与依赖关系 四、 功能需求 4.4.11.7 非功能性需求 五、 非功能性需求 5.1 用户界面需求 5.2 软硬件环境需求 5.3 产品质量需求 5.4 接口…...

!力扣102. 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] /*** Definition for…...

Vue3 + TS + Antd + Pinia 从零搭建后台系统(一) 脚手架搭建 + 入口配置

简易后台系统搭建开启&#xff0c;分几篇文章更新&#xff0c;本篇主要先搭架子&#xff0c;配置入口文件等目录 效果图一、搭建脚手架&#xff1a;二、处理package.json基础需要的依赖及运行脚本三、创建环境运行文件四、填充vue.config.ts配置文件五、配置vite-env.d.ts使项目…...

中国同胞进来看看,很多外国人想通过CSDN坑咱们中国人

地址&#xff1a;【诈骗离你我很近】中国同胞进来看看国外诈骗新套路。-CSDN博客...

Web前端电话咨询:深度解析与实用指南

Web前端电话咨询&#xff1a;深度解析与实用指南 在数字化时代&#xff0c;Web前端技术日新月异&#xff0c;对于许多企业和个人而言&#xff0c;通过电话咨询了解前端技术的最新动态和解决方案已成为一种高效且便捷的方式。本文将从四个方面、五个方面、六个方面和七个方面&a…...

使用python绘制季节图

使用python绘制季节图 季节图效果代码 季节图 季节图&#xff08;Seasonal Plot&#xff09;是一种数据可视化图表&#xff0c;用于展示时间序列数据的季节性变化。它通过将每个时间段&#xff08;如每个月、每个季度&#xff09;的数据绘制在同一张图表上&#xff0c;使得不同…...

深圳网站开发建设培训/软件开发外包公司

PHP页面的编码方式是utf-8&#xff0c;用 echo "<script typetext/javascript>alert(已全部清除&#xff01;);script>";输出时弹出乱码窗口&#xff0c; 原因&#xff1a;因为有alert()输出中文到浏览器&#xff0c;所以一定要在网页中指定编码方式为UTF-8…...

机关单位特色的网站建设/月嫂免费政府培训中心

Visual Studio 2010其他版本此主题尚未评级 评价此主题静态构造函数用于初始化任何 静态 数据&#xff0c;或用于执行仅需执行一次的特定操作。 在创建第一个实例或引用任何静态成员之前&#xff0c;将自动调用静态构造函数。 C#class SimpleClass {// Static variable that mu…...

没网站可以做百度推广吗/网络推广方式有哪几种

HTML 基础 文章目录HTML 基础一&#xff0c;结构1.1HTML文件基本结构1.2标签层次结构二、HTML常见标签2.1 标题标签2.2注释标签2.3段落标签2.4换行标签2.5格式化标签2.6 图片标签 img ☆2.7超链接标签2.8表格2.9列表标签三、表单标签3.1 input ☆3.2 select3.3 textarea3.3 无语…...

广州做网站好的公司/网络营销师资格证

CSS布局实例:上中下三行布局&#xff0c;上下定高&#xff0c;中间栏自适应浏览器高度&#xff0c;且内容垂直居中。本文代码在firefox 2.0 / winie 6/ win ie 7 /opera 8.5 cn/win safari测试通过。对于非ie内核浏览器&#xff0c;通过设定display:table、display:table-row和…...

浙江做网站多少钱/大众网潍坊疫情

来源&#xff1a;https://s.yam.com/w6mfR一、注解(annotations)列表SpringBootApplication&#xff1a; 包含了ComponentScan、Configuration和EnableAutoConfiguration注解。其中ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。Configuration 等同…...

宿迁做网站优化/网站构建的基本流程

本节书摘来自异步社区《JavaScript入门经典&#xff08;第6版&#xff09;》一书中的第2章&#xff0c;第2.8节&#xff0c;作者&#xff1a; 【美】 Phil Ballard 译者&#xff1a;李 军陈冀康&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.8 作业 请…...