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);

		//构建fileUrl
		String 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{
	
	@Autowired
	private 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{
	
	@Override
	public String upload(MultipartFile file){
		try{
		//创建MinioClient对象
		MinioClient minioClient = MinioClient.builder()
			.endpoint("http://127.0.0.1:9000")
			.credentials("minioadmin",minioadmin)
			.build();

			//创建bucket
			boolean 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:9000
		accessKey: minioadmin
		secreKey: minioadmin
		bucketName: 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-upload
	class="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.mfbz.cn/a/254515.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RHEL8_Linux_Ansible常用模块的使用

本章主要介绍Ansible中最常见模块的使用 shell模块文件管理模块软件包管理模块服务管理模块磁盘管理模块用户管理模块防火墙管理模块 ansible的基本用法如下。 ansible 机器名 -m 模块x -a "模块的参数" 对被管理机器执行不同的操作&#xff0c;只需要调用不同的模块…

做计算,找天玑算!

天玑算科研服务_DFT计算_MD模拟_FEA_ML_相图计算200余位计算工程师均来自己TOP高校及科研院所&#xff0c;涉及第一性原理&#xff0c;分子动力学&#xff0c;有限元&#xff0c;机器学习&#xff0c;可为催化、电池、能源、化工、生物等重多领域提供技术支持&#xff0c;计算软…

基于Springboot的旅游网站设计与实现(论文+调试+源码)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

虚幻学习笔记18—C++委托(多播)和事件

一、前言 委托分单播和多播&#xff0c;多播就是可以绑定多个回调函数&#xff0c;然后一次性执行。这样也可以理解为啥多播没有返回值&#xff0c;多个回调函数执行后返回哪一个都是问题啊。而事件呢官方官方文档说法是“对于事件而言&#xff0c;只有定义事件的类才能调用 Br…

专属配方重磅发布,蒙牛悠瑞开创中老年奶粉新征程

随着中国老龄化现象日益加剧&#xff0c;中老年人群营养需求市场不断扩容&#xff0c;蒙牛集团2024全球合作伙伴大会奶粉事业部分会成为了备受行业关注的一个焦点&#xff0c;会上蒙牛旗下高端中老年奶粉品牌悠瑞联合中山大学发布了《中国中老年人健康状况及专属营养解决方案》…

SpringCloud微服务之间如何进行调用通信的?

1.同步通信 RESTful API&#xff1a;RESTful 通信使用 HTTP 协议&#xff0c;以 JSON格式来传输数据&#xff0c;具有轻量级、高效、可扩展性等优势&#xff0c;是许多系统之间接口通信的首选方式。&#xff08;springcloud使用&#xff09; RPC&#xff1a;RPC&#xff08;远…

羊大师之冷天喝羊的好处大揭秘!

最近&#xff0c;冷天喝羊已经成为了一种趋势&#xff0c;受到了越来越多人的关注与喜爱。你可能会好奇&#xff0c;为什么冷天喝羊有那么多的好处呢&#xff1f;今天小编羊大师将带大家一起探索这个问题&#xff0c;揭秘冷天喝羊带来的种种益处。 冷天喝羊对于保持身体温暖是…

HarmonyOS--基础组件Button

Button组件 可以包含单个子组件。 Button(label?: ResourceStr, options?: { type?: ButtonType, stateEffect?: boolean }) 1&#xff1a;文字按钮 Button(‘点击’) 2&#xff1a;自定义按钮,嵌套其它组件 Button() {Image(https://) }.type(ButtonType.Circle)

LeetCode-数组-矩阵问题-中等难度

[toc]矩阵 矩阵是二维数组相关的应用题型&#xff0c;常见的有矩阵水平翻转、矩阵对角线翻转、矩阵遍历等。 1. 重塑矩阵 1.1 题目描述 leetcode跳转&#xff1a;566. 重塑矩阵 1.2 方法一&#xff1a;简单模拟 借助一个一维数组用来保持按行列遍历的结果&#xff0c;然后…

欧盟健身单车出口BS EN ISO 20957安全报告测试

固定的训练器材.第10部分:带固定轮或无自由飞轮的训练自行车.附加特定安全要求和试验方法 作为欧洲固定式健身器材&#xff08;儿童用固定式健身器材不在此范围&#xff09;通用安全要求和测试方法的标准&#xff0c;涉及固定式健身器材精度、使用场所分类定义、稳定性、安全间…

Redis设计与实现之订阅与发布

目录 一、 订阅与发布 1、 频道的订阅与信息发送 2、订阅频道 3、发送信息到频道 4、 退订频道 5、模式的订阅与信息发送 ​编辑 6、 订阅模式 7、 发送信息到模式 8、 退订模式 三、订阅消息断连 1、如果订阅者断开连接了&#xff0c;再次连接会不会丢失之前发布的消…

儿童玩具行业分析:发展态势良好,市场空间不断拓展

玩具是有利于促进幼儿体、德、智、美的全面发展;符合儿童年龄特征&#xff0c;能满足其好奇心、好动和探索活动的愿望;造型优美&#xff0c;反映事物的典型特征;活动多变&#xff0c;有助于鼓励学习。中国玩具产品包括毛绒玩具、塑胶玩具、纸质玩具、电子玩具、木制玩具、金属玩…

抖音网红的各种变现办法

抖音作为一款风靡全球的短视频平台&#xff0c;不仅为用户带来了娱乐和社交的乐趣&#xff0c;也为一些优秀的内容创作者提供了机会&#xff0c;成为了网红。而成为抖音网红不仅仅是一种荣誉&#xff0c;更是一种潜在的经济收入来源。在这篇文章中&#xff0c;我将介绍一些抖音…

气泡水机市场调研: 2023年行业消费需求及发展前景分析

气泡水机用于制作气泡水的机器&#xff0c;隶属于家电产业。在欧美等发达国家早已普遍使用&#xff0c;中国仅台湾等开放发达地方盛行。在中国大陆较为少见&#xff0c;近两年以健康环保产品形象兴起&#xff0c;市场饱和度不高。 中国气泡水机首次出现在中国市场是2012年&a…

小红书kop营销策略有哪些,达人投放总结!

从kol到koc&#xff0c;当今时代产品种草模式&#xff0c;层出不穷。品牌想要跟上市场更新迭代的洪流&#xff0c;就需要时刻了解新型的营销方式。那么对于新型的kop模式你了解多少呢?我们今天就将详细分享小红书kop营销策略有哪些&#xff0c;达人投放总结&#xff01; 一、什…

[Ray Tracing in One Weekend] 笔记

前言 本文参照自raytracing in one weekend教程&#xff0c;地址为&#xff1a;https://raytracing.github.io/books/RayTracingInOneWeekend.html 什么是光线追踪&#xff1f; 光线追踪模拟现实中的成像原理&#xff0c;通过模拟一条条直线在场景内反射折射&#xff0c;最终…

Tinymce 5 插入代码集成highlight.js(踩坑记录)

目录 官方教程 坑点一 坑点二 坑点三 坑点四 TinyMCE HighLight.js Plugin 官方教程 1. 引入 tinymce 库文件 <script src"tinymce.min.js"></script> 2. 引入 highlight js 库文件 <script src"plugins/becodesample/highlight.js-11.…

word怎么分页?学会这几招,轻松掌握分页功能!

Microsoft Word作为办公文档处理的主力工具&#xff0c;其强大的排版功能为用户提供了丰富的文档编辑体验。其中&#xff0c;分页是一个常用但可能被忽视的重要功能&#xff0c;能够使文档结构更清晰、更易读。本文将向您介绍word怎么分页的三种方法&#xff0c;帮助您更好地掌…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Text文本组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之文本组件 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、文本组件 Text 是显示文本的基础组件之一&#xff0c;它可以包含子组件 Span &…

软件测试面试八股文(超详细整理)

请你说一说测试用例的边界 参考回答&#xff1a; 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充&#xff0c;这种情况下&#xff0c;其测试用例来自等价类的边界。 常见的边界值 1)对16-bit 的整数而言 32…