使用minio高性能存储图片

news/2025/1/23 5:14:02/

在服务器中安装minio

使用docker在服务器中安装minio,命令如下docker pull minio/minio

创建minio的存储文件mkdir -p ~/minio/data

创建容器并运行

docker run    -p 9001:9000    -p 9090:9090    --name minio    -v ~/minio/data:/data    -e "MINIO_ROOT_USER=admin"    -e "MINIO_ROOT_PASSWORD=admin123456"    -d    quay.io/minio/minio server /data --console-address ":9090"

登录账号为admin,密码为admin123456

使用element-plus插入上传图片的代码

<template><el-uploadclass="avatar-uploader"action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15":show-file-list="false":on-success="handleAvatarSuccess":before-upload="beforeAvatarUpload":headers="headers"><img v-if="imageUrl" :src="imageUrl" class="avatar" /><el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon></el-upload>
</template>

注意:action路径要改为自己的后端接口,还需要加上请求头属性

javascript">import { useApp } from '@/pinia/modules/app'
const headers=ref({
token:useApp().authorization.token
})

后端实现接口

引入依赖

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

controller

java">public class FileUploadController {@AutowiredFileUploadService fileUploadService;@PostMapping("fileUpload")public Result fileUpload(@RequestParam(value = "file")MultipartFile multipartFile){String fileUrl=fileUploadService.fileUpload(multipartFile);return Result.ok(fileUrl);}
}

Service

java">@Service
public class FileUploadServiceImpl implements FileUploadService {@AutowiredMinioProperties minioProperties;@SneakyThrows@Overridepublic String fileUpload(MultipartFile multipartFile) {//客户端MinioClient minioClient= MinioClient.builder().endpoint(minioProperties.getEndpointUrl()).credentials(minioProperties.getAccessKey(), minioProperties.getSecreKey()).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("minio桶存在");}//设置存储对象String extFileName= FileNameUtils.getExtension(multipartFile.getOriginalFilename());String fileName=new SimpleDateFormat("yyyy/MM/dd/").format(new Date())+ UUID.randomUUID().toString().replace("-","")+"."+extFileName;//参数PutObjectArgs putObjectArgs= PutObjectArgs.builder().bucket(minioProperties.getBucketName()).stream(multipartFile.getInputStream(), multipartFile.getSize(), -1).object("avatar/"+fileName).build();//上传minioClient.putObject(putObjectArgs);return minioProperties.getEndpointUrl()+"/"+minioProperties.getBucketName()+"/"+"avatar/"+fileName;}}

在这里使用了配置文件当中的参数,MinioProperties 读取配置文件当中的参数

java">@Data
@ConfigurationProperties(prefix = "spzx.minio")
@Component// 前缀不能使用驼峰命名
public class MinioProperties {private String endpointUrl;private String accessKey;private String secreKey;private String bucketName;
}
 #minio参数
spzx:minio:endpointUrl: http://192.168.159.30:9001accessKey: adminsecreKey: admin123456bucketName: spzx

前端实现上传成功后的回显

javascript">//处理上传头像成功
function handleAvatarSuccess(response,file){sysUser.value.avatar=response.data//alert(sysUser.value.avatar)
}


http://www.ppmy.cn/news/1565404.html

相关文章

python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖

【1】引言 前序学习了使用numpy创建单通道的灰色图像&#xff0c;并对灰色图像的局部进行了颜色更改&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;九&#xff09;用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 之后又学习了使用numpy创…

【Elasticsearch】索引创建、修改、删除与查看

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探…

人类大脑与大规模神经网络的对比及未来展望

引言 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;研究人员不断尝试构建更加复杂和强大的模型&#xff0c;以期实现与人类大脑相媲美的智能水平。本文将探讨当前大规模神经网络&#xff08;LLM, Large Language Models&#xff09;的发展现状&#xff0…

数据可视化:让数据讲故事的艺术

目录 1 前言2 数据可视化的基本概念2.1 可视化的核心目标2.2 传统可视化手段 3 数据可视化在知识图谱中的应用3.1 知识图谱的可视化需求3.2 知识图谱的可视化方法 4 数据可视化叙事&#xff1a;让数据讲故事4.1 叙事可视化的关键要素4.2 数据可视化叙事的实现方法 5 数据可视化…

路由器旁挂三层网络实现SDWAN互联(爱快SD-WAN)

近期因公司新办公区建设&#xff0c;原有的爱快路由器的SDWAN功能实现分支之间互联的服务还需要继续使用。在原有的小型网络中&#xff0c;使用的爱快路由器当作网关设备&#xff0c;所以使用较为简单,如下图所示。 现变更网络拓扑为三层网络架构&#xff0c;但原有的SDWAN分支…

list底层实现细节

一、部分代码展示 #pragma once #include<cassert> namespace bit {template<class T>struct ListNode{ListNode<T>* _prev;ListNode<T>* _next;T _data;ListNode(const T& val T()):_prev(nullptr), _next(nullptr), _data(val){}};// 迭代器//…

Python 进阶 - Excel 基本操作

Python 进阶 - Excel 基本操作 概述写入使用 xlwt使用 XlsxWriter 读取修改 概述 在现实中&#xff0c;很多工作都需要与数据打交道&#xff0c;Excel 作为常用的数据处理工具&#xff0c;一直备受人们的青睐&#xff0c;而大部分人都是手动操作 Excel&#xff0c;如果数据量较…

MYSQL数据库基础-01.数据库的基本操作

数据库的语法是大小写不敏感的&#xff0c;可以使用大写&#xff0c;也可以使用小写。 每条语句要以&#xff1b;结尾&#xff0c;可以多行输入。 名称不能是关键字,若想用关键字命名,要用反引号 引起来。 目录 一.数据库的基本操作 1.创建数据库&#xff1a; 2.查看数据库…