
MinIO - 服务端签名直传(前端 + 后端 + 效果演示)
选择文件:点击选择按钮,选择需要上传的文件(如 上传文件:点击“上传”按钮,系统会自动处理文件上传。 查看结果:上传成功后,可以在MinIO控制台查看文件是否已经成功长传。
发布日期:2025-04-14 03:06:22
浏览次数:9
分类:精选文章
本文共 2611 字,大约阅读时间需要 8 分钟。
服务端签名直传:实现OSS文件上传的最佳方式
传统的文件上传方式
在传统的实现中,有两种主要方式可以将图片上传到OSS(Object Storage Service):
前端请求 -> 后端服务器 -> OSS
优点:安全性较高,OSS账号信息不会被用户看到。缺点:可能给后端服务器带来较大的负载压力。直接写在前端JS代码中
优点:效率高,减少了对后端服务器的依赖。缺点:存在安全隐患,用户可以直接看到OSS账号密码信息。服务端签名直传:解决问题
因此,最好的方式就是采用服务端签名直传:
- 用户直接向服务器请求获取上传签名(由服务器生成的加密签名,通常带有过期时间)。
- 服务器返回签名后,用户可以拿着签名和要上传的文件,通过表单直接上传到OSS中。
这样既不会给服务器带来上传文件的压力,也确保了OSS账号密码信息的安全性。
后端实现
1. 配置文件
在Spring Boot项目中,我们需要先配置MinIO客户端。以下是配置文件的内容:
minio.access-key=rootminio.secret-key=rootrootminio.endpoint=http://100.105.180.32:9001minio.bucket=dir1
2. Bean配置
在Spring配置类中,定义MinIO客户端:
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import io.minio.MinioClient;import org.springframework.beans.factory.annotation.Value;@Configurationpublic class MinioConfig { @Value("${minio.access-key}") private String accessKey; @Value("${minio.secret-key}") private String secretKey; @Value("${minio.endpoint}") private String endpoint; @Bean public MinioClient minioClient() { return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); }}
3. 核心代码
在API控制器中,实现签名生成和文件上传:
import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/third/minio")public class MinioApi { private final MinioClient minioClient; @Value("${minio.endpoint}") private String endpoint; @Value("${minio.bucket}") private String bucket; public MinioApi(MinioClient minioClient) { this.minioClient = minioClient; } @RequestMapping(value = "/policy", method = RequestMethod.GET) public Mappolicy() { String objectNamePrefix = "uploads/"; var expiration = ZonedDateTime.now().plusHours(1); var postPolicy = minioClient.getPresignedPostFormData( new PostPolicy( bucket, expiration ).run { addStartsWithCondition("key", objectNamePrefix) addContentLengthRangeCondition(1, 10485760) } ); postPolicy.result.apply { this["url"] = "$endpoint/$bucket" } return postPolicy.result; }}
前端实现
在前端,实现文件上传的逻辑:
MinIO 文件上传 MinIO 文件上传
效果演示
mongo.png
)。通过以上实现,您可以轻松实现安全、高效的文件上传功能,同时减少服务器负载。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月13日 07时04分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MFC模态对话框和非模态对话框
2025-04-14
MFC调用DOS窗口显示信息
2025-04-14
mha高可用
2025-04-14
MHA高可用架构与Atlas读写分离
2025-04-14
Miaoo朋友圈程序全完整版源码
2025-04-14
MicroJob 任务注册中心添加 Nacos 支持,升级 0.0.3 版本
2025-04-14
Microsoft Access 详解-chatgpt4o作答
2025-04-14
Microsoft AI-System 开源项目教程
2025-04-14
Microsoft Project Acoustics 开源项目教程
2025-04-14
Microsoft Security Updates API 使用教程
2025-04-14
Microsoft SQL Server 2000收缩MDF数据
2025-04-14
Microsoft SQL Server 2005 提供了一些工具来监控数据库
2025-04-14
Microsoft Store 里面应用没有获取和安装按钮,无法安装应用 怎么办?
2025-04-14
Microsoft Windows XP SP3安装测试手记
2025-04-14
Microsoft.CSharp.targets不存在解决方法
2025-04-14
Microsoft语音识别定制培训
2025-04-14
MIF格式详解,javascript加载导出 MIF文件示例
2025-04-14