SpringBoot项目实现文件上传,MINIO+OSS阿里云

MINIO 安装以及部署

官网:MinIO | Code and downloads to create high performance object storage

下载后是一个minio.exe的文件,可以先创一个文件夹来存放数据以及文件

在文件的目录下cmd进入控制台

minio.exe server data

启动成功后控制台会打印账号密码

访问地址:http://127.0.0.1:9000,输入账号密码登录页面

创建桶

解读一下:

bucket name:bucket名字。
versioning: 版本控制允许在同一个键下保留同一个对象的多个版本。
object locking:对象锁定防止对象被删除。需要支持保留和合法持有。只能在创建桶时启用。
quota:配额用于限制桶内的数据量。
retention:保留是指在一段时间内防止对象删除的规则。为了设置桶保留策略,必须启用版本控制。

文件上传测试

Spring使用minio

在官网下找到最新的依赖包

添加依赖后,在yml文件下配置相关配置

添加minio的配置文件,注意:@Value的注解导入是spring的原生注解

@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {@Value("${minio.endpoint}")private String endpoint;@Value("${minio.access-key}")private String accessKey;@Value("${minio.secret-key}")private String secretKey;@Value("${minio.bucket-name}")private String bucketName;@Beanpublic MinioClient minioClient(){return MinioClient.builder().endpoint(endpoint).credentials(accessKey,secretKey).build();}
}

创建工具类,实现文件上传

 /*** 上传文件到指定的存储桶中** @param bucketName 存储桶名称* @param file 上传的文件* @param objectName 存储对象的名称* @param contentType 文件的内容类型* @return 文件上传的响应对象* @throws Exception 如果上传过程中发生异常*/@SneakyThrows(Exception.class)public ObjectWriteResponse uploadFile(String bucketName, MultipartFile file, String objectName, String contentType) {InputStream inputStream = file.getInputStream();return minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).contentType(contentType).stream(inputStream, inputStream.available(), -1).build());}

controller层实现接口调用

 @PostMapping("/upload")public String upload(@RequestParam("file") MultipartFile file) {try {System.out.println(123);//文件名String fileName = file.getOriginalFilename();String newFileName = System.currentTimeMillis() + "." + StringUtils.substringAfterLast(fileName, ".");//类型String contentType = file.getContentType();minioTemplate.uploadFile(minioConfig.getBucketName(), file, newFileName, contentType);return "上传成功";} catch (Exception e) {e.printStackTrace();log.error("上传失败");return "上传失败";}}

postman测试结果

Spring实现阿里云OSS文件上传

创建Bucket时需要记录Endpoint访问节点

再在管理创建用户拿到对应的ID以及Secret

在yml文件中配置相对应的配置

创建OSS配置文件以及工具类

@Service
public class FileServiceImpl implements FileService {@Autowiredprivate OSSConfig ossConfig;private Logger log;@Overridepublic String upload(MultipartFile file) {//获取相关配置String bucketName = ossConfig.getBucketName();String endPoint = ossConfig.getEndPoint();String accessKeyId = ossConfig.getAccessKeyId();String accessKeySecret = ossConfig.getAccessKeySecret();//创建OSS对象OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);//获取原生文件名String originalFilename = file.getOriginalFilename();//JDK8的日期格式LocalDateTime time = LocalDateTime.now();DateTimeFormatter dft = DateTimeFormatter.ofPattern("yyyy/MM/dd");//拼装OSS上存储的路径String folder = dft.format(time);String fileName = generateUUID();String extension = originalFilename.substring(originalFilename.lastIndexOf("."));//在OSS上bucket下的文件名String uploadFileName = "user/" + folder + "/" + fileName + extension;try {PutObjectResult result = ossClient.putObject(bucketName, uploadFileName, file.getInputStream());//拼装返回路径if (result != null) {return "https://"+bucketName+"."+endPoint+"/"+uploadFileName;}} catch (IOException e) {log.error("文件上传失败:{}",e.getMessage());} finally {//OSS关闭服务,不然会造成OOMossClient.shutdown();}return null;}/*** 获取随机字符串* @return*/private String generateUUID() {return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32);}
}

OSSconfig

@ConfigurationProperties(prefix = "aliyun.oss")
@Configuration
@Data
public class OSSConfig {private String endPoint;private String accessKeyId;private String accessKeySecret;private String bucketName;}

Controller层进行测试

@PostMapping("/upload")public Map<String , Object> uploadFile(@RequestPart("file") MultipartFile file) {String FileStr = fileService.upload(file);return buildResult(FileStr);}

测试结果

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

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

相关文章

opencv判断二值的情况

目的 先说说理论&#xff1a; 什么叫图像的二值化&#xff1f;二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0&#xff08;黑色&#xff09;或者255&#xff08;白色&#xff09;&#xff0c;也就是让整个图像呈现只有黑和白的效果。在灰度化的图像中灰度值的范围为0…

C# OpenVINO 百度PaddleSeg实时人像抠图PP-MattingV2

目录 效果 项目 代码 下载 C# OpenVINO 百度PaddleSeg实时人像抠图PP-MattingV2 效果 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Diagnostics; using System.Drawing; using System.Security.Cryptography; using System.Text; us…

C# winfroms使用socket客户端服务端代码详解

文章目录 1️⃣ 通信相关说明1.1服务端与客户端1.2 信息发送原理1.3 信息接收原理 2️⃣ socket代码2.1 客户端代码2.2 服务端代码 3️⃣ 定时任务处理报文3.1 Timers定时任务 优质资源分享 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_4315141…

ChatGPT plus 的平替:9个可以联网的免费AI搜索引擎

ChatGPT plus 的平替&#xff1a;9个可以联网的免费AI搜索引擎。 由于ChatGPT 训练数据截止到2021年9月&#xff0c;在该时间点之后发生的事件&#xff0c;ChatGPT均无法给出答复。所以&#xff0c;大家现在都非常期待ChatGPT能够联网&#xff0c;访问实时的信息。 ChatGPT pl…

台式电脑黑屏无法开机怎么办 电脑开机黑屏的解决方法

经常有朋友电脑一开机&#xff0c;发现电脑黑屏没法用了。很多人看到黑屏就懵了&#xff0c;以为电脑要报废了&#xff0c;这是什么原因?电脑开机黑屏怎么解决?一般常说的黑屏故障分为两种&#xff0c;显示屏没有任何显示以及显示英文。下面小编要为大家带来的是台式电脑黑屏…

利用Socket.io实现实时通讯功能

在当今快节奏的社交和工作环境中&#xff0c;实时通讯已经变得至关重要。无论是在线游戏的即时交流&#xff0c;还是团队协作中的实时消息传递&#xff0c;都需要强大的实时通讯功能来支持。而在前端开发中&#xff0c;利用Socket.io这一强大的工具库&#xff0c;实现实时通讯功…

康威生命游戏

康威生命游戏 康威生命游戏(Conway’s Game of Life)是康威发明的细胞自动机。 生命游戏有几个简单的规则&#xff1a; 细胞有两种状态&#xff0c;存活或死亡&#xff0c;每个细胞以自身为中心与周围的八格细胞互动。 对于存活的细胞&#xff1a; 当周围的细胞过少(<2)或…

第2讲:C语言数据类型和变量

第2讲&#xff1a;C语言数据类型和变量 目录1.数据类型介绍1.1字符型1.2整型1.3浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof 操作符1.5.2 数据类型长度1.5.3 sizeof 中表达式不计算 2.signed 和 unsigned3.数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5…

JVM内存随着服务器内存的升高而升高问题排查

一、故障描述 公司测试环境和线上环境&#xff0c;都会有&#xff1a;JVM内存随着服务器内存的升高而升高 这种问题 二、排查 1、linux服务器上使用htop查看java项目内存占比&#xff0c;给最大最小推内存300m&#xff0c;但是实际上超出一倍 2、排查方案 a、通过后面的学习…

小程序-上拉触底

1.概念 2.使用与监听 3.配置距离

记录 | docker内执行apt update报错GPG error

1. 执行 sudo apt-get update 命令时遇到这个错误&#xff0c;是服务器没有这个公钥的意思 rootadmin:~# sudo apt-get update Get:1 https://download.docker.com/linux/ubuntu focal InRelease [36.2 kB] Err:1 https://download.docker.com/linux/ubuntu focal InRelease T…

01_02_mysql09_MySQL的数据目录

MySQL的数据目录 学习再总结宋红康老师课程内容1.MySQL8的主要目录结构 安装好MySQL8之后&#xff0c;查看如下的目录结构 find / -name mysql1.1数据库文件的存放路径 MySQL数据库文件的存放路径&#xff1a;/var/lib/mysql/ 1.2相关命令目录 相关命令目录&#xff1a;/u…