Minio文件服务器(上传文件)

官网:https://www.minio.org.cn/
开源的分布式对象存储服务器

在这里插入图片描述

Window安装
在这里插入图片描述
在这里插入图片描述

用户名和密码相同
在这里插入图片描述
创建bucket,并且将策略改成public
在这里插入图片描述

一、添加依赖

二、代码

public class FileUploadTest{public static void main(String[] args) throws Exception{//创建一个Minio客户端对象(链接地址和用户名密码)MinioClient minioClient = MinioClient.builder().endpoint("http://127.0.0.1:9000").credentials("minioadmin","minioadmin").build();boolean found = monioClient.bucketExists(BucketExistsArgs.builder().bucket("spzx-bucket").build());//如果不存在,那么此时就创建一个新的桶if(!found){minioClient.makeBucket(MakeBucketArgs.builder().bucket("spzx-bucket").build());}else{//如果存在打印信息System.out.println("Bucket 'spzx-bucket' already exists");}FileInputStream fis = new FileInputStream("D://01.jpg");PubObjectArgs putObjectArgs = PutObjectArgs.builder().bucket("spzx-bucket").stream(fis,fis.available(),-1).object("01.jpg").build();minioClient.putObject(putObjectArgs);//构建fileUrlString fileUrl = "http://127.0.0.1:9000/spzx-bucket/01.jpg";System.out.println(fileUrl);}
}

实战应用

上传一个文件到服务器

一、Cotroller/Service/Mapper

@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);}
}
@Service
public class FileUploadServiceImpl implements FileUploadService{@Overridepublic String upload(MultipartFile file){try{//创建MinioClient对象MinioClient minioClient = MinioClient.builder().endpoint("http://127.0.0.1:9000").credentials("minioadmin",minioadmin).build();//创建bucketboolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("spzx-bucket")).build();if(!found){minioClient.makeBucket(MakeBucketArgs.builder().bucket("spzx-bucket")).build();}else{System.out.println("Bucket 'asiatrip' already exists");}//获取上传文件名称String filename = file.getOriginalFilename();//开始上传minioClient.putObject(PubObjectArgs.builder().bucket("spzx-bucket").object("filename").stream(file.getInputStream(),file.getSize(),-1).build());//获取文件在服务器的路径String url = "http://127.0.0.1:9000/spzx-bucket" + filename;return url;}catch(Exception e){e.printStackTrace();throw new GuiguiException(ResultCodeEnum.SYSTEM_ERROR);}}}

代码优化:

①、将固定的ip端口等放到配置文件中

spzx:minio:endpointUrl: http://127.0.0.1:9000accessKey: minioadminsecreKey: minioadminbucketName: spzx-bucket

②、创建一个类读取配置文件

@Data
@ConfigurationProperties(prefix = "spzx.minio")
public class MinioProperties{//其中成员变量名必须和配置文件中的名一致private String endpointUrl;private Strin accessKey;private String secreKey;private String bucketName;
}

③、启动类中添加注解@EnableConfigurationProperties(value={MinioProperties.class})

④、使用

@Autowired
private MinioProperties minioProperties;//通过get方法获取属性值

上传文件名称唯一性优化,根据当前日期对上传文件进行分:

//通过工具类DateUtil生成对应格式的目录
String dateDir = DateUtil.format(new Date(),"yyyyMMdd");
String uuid = UUID.randomUUID().toString().replaceAll("-","");String filename = dateDir +"/"+uuid+file.getOriginalFilename();

前端

<el-uploadclass="avatar-upload"action="http://localhost:8501/admin/system/fileUpload":show-file-list="false":on-success="handleAvatarSuccess":headers="headers"></el-upload><script setup>import {useApp} from '@/pinia/modules/app'const headers = {token:useApp().authprization.token //从pinia中获取token,在进行文件上传时将token设置到请求头中}//图像上传成功以后的事件处理函数const handleAvatarSuccess = (response.uploadFile) => {sysUser.value.avatar = response.data}
</script>

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

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

相关文章

IDA pro软件 如何修改.exe小程序打开对话框显示的文字?

环境: Win10 专业版 IDA pro Version 7.5.201028 .exe小程序 问题描述: IDA pro软件 如何修改.exe小程序打开对话框显示的文字? 解决方案: 一、在IDA Python脚本中编写代码来修改.rdata段中的静态字符串可以使用以下示例代码作为起点(未成功) import idc# 定义要修…

微信小程序背景图片设置

问题 :微信小程序通过css:background-image引入背景图片失败 [渲染层网络层错误] pages/wode/wode.wxss 中的本地资源图片无法通过 WXSS 获取&#xff0c;可以使用网络图片&#xff0c;或者 base64&#xff0c;或者使用<image/>标签 解决方法微信小程序在使用backgroun…

STM32-UART-DMA HAL库缓冲收发

文章目录 1、说明1.1、注意事项&#xff1a;1.2、接收部分1.3、发送部分 2、代码2.1、初始化2.2、缓冲接收2.3、缓冲发送2.4、格式化打印 1、说明 1.1、注意事项&#xff1a; HAL库的DMA底层基本都会默认开启中断使能&#xff0c;如果在STM32CubeMx禁用了中断相关的功能&…

联合电子车载充配电单元全球量产

2023年12月&#xff0c;联合电子新一代车载充配电单元批量交付。该产品将应用于全球市场&#xff0c;可覆盖中国、欧洲、北美、日本的交流与直流充电通讯体系。 该车载充配电单元由车载充电机&#xff08;On-board Charger&#xff09;和高压直流转换器&#xff08;HV DCDC Co…

JVM日常故障排查小结

前置知识 jstack简介 jstack是JVM自带的工具&#xff0c;用于追踪Java进程线程id的堆栈信息、锁信息&#xff0c;或者打印core file&#xff0c;远程调试Java堆栈信息等。 而我们常用的指令则是下面这条: # 打印对应java进程的堆栈信息 jstack [ option ] pid option常见选…

06. Python模块

目录 1、前言 2、什么是模块 3、Python标准库模块 3.1、os模块 3.2、datetime 模块 3.3、random模块 4、自定义模块 4.1、创建和使用 4.2、模块命名空间 4.3、作用域 5、安装第三方依赖 5.1、使用 pip 安装单个依赖 5.2、从 requirements.txt 安装依赖 5.3、安装指…

20231218给Firefly的AIO-3399J【RK3399】开发板刷Android12挖掘机方案

20231218给Firefly的AIO-3399J【RK3399】开发板刷Android12挖掘机方案 2023/12/18 21:07 一、整体编译Rockchip的的Android12的挖掘机方案&#xff01; 由于RK3399的Android12系统默认是IND工业方案&#xff0c;需要修改一下【为挖掘机方案】。 Z:\3TB\81rk_android12_220722\…

三菱plc学习入门(一,认识三菱plc)

今天就开始对三菱的plc软件入一个门&#xff0c;希望小编的文章对读者和初学者有所帮助&#xff01;欢迎评论指正&#xff0c;废话不多说&#xff0c;下面开始学习。 目录 plc的型号介绍 M表示什么&#xff1f; T表示什么&#xff1f; R表示什么&#xff1f; 为什么三菱没…

mysql函数(三)之常见数学函数

MySQL提供了很多常用的数学函数&#xff0c;常见的数学函数及使用如下&#xff1a; ABS(X)&#xff1a;返回X的绝对值。 例子&#xff1a;SELECT ABS(-5); – 结果为5 效果图&#xff1a; CEIL(X)&#xff1a;返回大于或等于X的最小整数值。 例子&#xff1a;SELECT CEIL(3.2…

MyBatis首次使用并查询数据库中表的数据

MyBatis首次使用并查询数据库中表的数据 1、传统Jdbc代码问题分析 public class JdbcTest {public static void main(String[] args) {try {//1.加载数据库驱动Class.forName("com.mysql.jdbc.Driver");//2.创建连接对象String url "jdbc:mysql://192.168.10…

MySQL下载、安装、配置详细教程

目录 1 下载 2 安装 2.1执行安装命令&#xff1a; 2.2 编写配置文件 2.3查看默认mysql的密码&#xff1a; 2.4启动mysql服务 2.5 登录mysql&#xff0c;修改密码 3 系统环境变量配置 3.1 配置 3.2 测试 1 下载 官方网址&#xff1a; https://www.mysql.com/跳转到如…

智慧农田三维可视化大屏,土壤检测,电磁阀控制,气象监测

个人主页&#xff1a; 左本Web3D&#xff0c;更多案例预览请点击》 在线案例 个人简介&#xff1a;专注Web3D使用ThreeJS实现3D效果技巧和学习案例 &#x1f495; &#x1f495;积跬步以至千里&#xff0c;致敬每个爱学习的你。喜欢的话请三连&#xff0c;有问题请私信或者加微…