aliyun-oss-spring-boot-starter之服务端签名后直传

SpringBoot 集成阿里云OSS文件存储服务 在分布式系统中,云计算是构建大型应用的基石之一。云文件存储(Cloud Object Storage Service,OSS)是一个基于对象存储、面向文件存储的海量、安全、低成本、高可靠、弹性扩展的网络存储服务。它具备安全、高可用、低成本、全覆盖多地部署等特点。随着云计算技术的迅速普及,越来越多的人开始关注并使用云文件存储服务。Spring Boot 是目前最流行的 Java 框架之一,它提供了简单易用、支持自动配置的特性,可以轻松实现微服务架构中的各种功能。 阅读详情

具体流程:首先我们需要将aliyun-oss-spring-boot-starter需要的签名数据配置在项目的配置文件里

其中签名数据包括四个部分:access-key、secret-key、endpoint、bucket,如下配置:

# 引入oss依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>aliyun-oss-spring-boot-starter</artifactId>
</dependency>    

# 配置参数
alibaba:
  cloud:
    access-key: LTAI5tLjeLxxxxxxx
    secret-key: loUIZ566Zxxxxxxxx
    oss:
      endpoint: oss-cn-shanghai.aliyuncs.com
      bucket: xxxxxxxx

当我们进行文件上传时,前端先向后获取上传的防伪签名,然后带着防伪签名和文件到OSS进行文件上传,这个过程阿里云OSS会验证签名是否正确,正确则进行文件上传。

为OSS对象存储配置专门的子账户,使用子账户的AccessKey和Security来生成访问签名,开通子账户地址阿里云开通OSS子账户  ,开通完子账户之后,我们还需要为该子账户添加特定的权限,比如管理OSS权限等。

 参考代码:

 @Autowired
    private OSS ossClient;

    @Value("${alibaba.cloud.oss.endpoint}")
    private String endpoint;

    @Value("${alibaba.cloud.oss.bucket}")
    private String bucket;

    @Value("${alibaba.cloud.access-key}")
    private String accessId;

    @GetMapping("/policy")
    public R policy() throws ServletException, IOException {

//        String bucket = "bucket-name"; // 请填写您的 bucketname 。
        String host = "https://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint
        // callbackUrl为上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
//        String callbackUrl = "http://88.88.88.88:8888";
//        String dir = "user-dir-prefix/"; // 用户上传文件时指定的前缀。
        String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        Map<String, String> respMap = new HashMap<>();
        try {
            long expireTime = 30;
            long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
            Date expiration = new Date(expireEndTime);
            // PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
            PolicyConditions policyConds = new PolicyConditions();
            policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
            policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, date);

            // 生成post请求代理
            String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
            // 将String类型的签名转换成字节数组
            byte[] binaryData = postPolicy.getBytes(StandardCharsets.UTF_8);
            // 将字节数组转换成
            String encodedPolicy = BinaryUtil.toBase64String(binaryData);
            // 生成签名
            String postSignature = ossClient.calculatePostSignature(postPolicy);

            respMap.put("accessid", accessId);
            respMap.put("policy", encodedPolicy);
            respMap.put("signature", postSignature);
            respMap.put("dir", date);
            respMap.put("host", host);
            respMap.put("expire", String.valueOf(expireEndTime / 1000));
            // respMap.put("expire", formatISO8601Date(expiration));

        } catch (Exception e) {
            // Assert.fail(e.getMessage());
            System.out.println(e.getMessage());
        } finally {
            ossClient.shutdown();
        }
        return R.ok().put("data",respMap);
    }

当前端从后端拿到签名数据后,前端的上传组件就可以通过绑定oss的backet地域节点为上传地址,同时携带上传数据和签名进行上传。

商品服务 - Aliyun OSS及商品品牌管理开发 1 Aliyun OSS 1.1 文件上传背景 普通上传分布式场景问题描述:文件会被上传到不确定的服务器节点,当读取文件时就可能无法获取。 采用文件存储服务,如图所示: 1.2 OSS简介 对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。 官方文档:https://help.aliyun.com/document_detail/31947.html?spm 阅读详情

相关推荐

保姆级教程:用Code Blocks搞定中科蓝讯AB5768E蓝牙音响SDK开发环境(附资源包)

本文提供了一份详细的Code Blocks配置指南,帮助开发者快速搭建中科蓝讯AB5768E蓝牙音响SDK开发环境。从工具链安装、环境配置到工程导入和调试技巧,涵盖全流程避坑要点,特别适合K12开发板初学者。附资源包下载,助您高效完成蓝牙音响开发。

weixin_28692817的博客 447

SpringCloud阿里云实现OSS

如果您使用了阿里云STS服务进行短期访问权限管理,则除了accessKey、secretKey、endpoint以外,还需配置securityToken。注意本节只是为了便于您理解接入方式,本示例代码中已经完成接入工作,您只需修改accessKey、secretKey、endpoint即可。i.在阿里云控制台界面,单击右上角头像,选择accesskeys,或者直接登录用户信息管理界面获取相关key信息填入。在启动示例进行演示之前,我们先了解一下如何接入OSS。.........

徐大大的博客 2034

Claude Code vs Codex

Claude Code 提供了一个生产就绪(production-ready)的实现,包含良好的错误处理、优雅的关闭逻辑、详细注释和文档,以及内置测试。Claude Code 输出了一个可运行的 Next.js + TypeScript 前端,但错过了一些设计里的黄色主题元素;Codex 则生成自己的版本,没有导出设计中的图片,也没严格遵照设计主题。Codex 完成同样功能,但更简洁直接,文档和注释少一些但功能达标。任务都用同样的提示,使用 TypeScript 实现,并在一天内完成。

weixin_49869937的博客 2382

SpringBoot——原理(自动配置_案例(自定义阿里云文件上传starter))

成功实现文件上传的依赖封装,大大降低了文件上传使用的繁琐程度。

测试 2056

基于大模型的围术期谵妄防控系统研究报告

围术期谵妄是一种急性脑功能障碍综合征,通常发生在手术前后一段时间内。患者会出现意识障碍、注意力不集中、认知功能紊乱、睡眠 - 觉醒周期失调等症状,严重者甚至会出现幻觉、妄想和攻击行为 。这种病症不仅会给患者自身带来极大的痛苦,还会对其术后康复产生严重的负面影响。从患者角度来看,围术期谵妄会显著延长患者的住院时间,增加患者的医疗费用负担。有研究表明,发生谵妄的患者住院时间平均比未发生者延长 2 - 3 天。长时间的住院不仅会影响患者的生活质量,还可能导致患者错过最佳的康复时机,影响身体机能的恢复。同时,谵妄还

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1070

【实战指南】Green Hills MULTI-IDE 从零安装到工程创建全流程

本文详细介绍了Green Hills MULTI-IDE从零安装到工程创建的全流程,包括系统要求检查、安装步骤、工程配置及调试技巧。特别适合嵌入式开发新手快速上手这款专业IDE工具,提升开发效率。

weixin_28740299的博客 474

开箱即用之SpringBoot整合OSS(图解 + 实战)

SpringBoot整合OSS(图解 + 实战)

2301_76354366的博客 5998

Cadence17.2 > OrCAD Capture CIS > 设计规则检查(Design Rule Check)DRC学习记录详解

选中设计完成的DSN文件,选择Tool->Design Rule Check,弹出下面对话框,详解如下。 一、Design Rule Check对话框选项详解 Design Rules Options tab Set the scope, mode and type of design rule (electrical and / or physical) test options for the design rules check. 为

DL_62532的专栏 1万+

这才是企业级的 oss-spring-boot-starter,真心牛x!

OSS(Object Storage Service),对象存储服务,对象存储服务是一种使用 HTTP API 存储和检索对象的工具。就是将系统所要用的文件上传到云硬盘上,该云硬盘提供了文件下载、上传、预览等一系列服务,具备版本,权限控制能力,具备数据生命周期管理能力这样的服务以及技术可以统称为 OSSOSS 对象存储在目前大部分项目中必不可少的存在,如下图所示。一般项目使用 OSS 对象存储服务,主要是对图片、文件、音频等对象集中式管理权限控制,管理数据生命周期等等,提供上传,下载,预览,删除等功能。

2301_78588786的博客 440

YOLOv8融合HAttention:激活更多像素的注意力机制科研实践指南

HAttention通过层级化像素激活与融合的设计,为YOLOv8的像素级特征利用能力带来了质的飞跃。从原理理解到代码实现,再到集成调优,每一步都是科研中“解决像素信息遗漏难题”的具体实践。如果你在实验中发现某类细节或大尺度目标的检测仍有不足,可以尝试结合数据增强(如随机裁剪、多尺度训练)来强化模型对像素特征的学习能力。科研的价值在于不断挖掘技术的潜力,希望这份指南能真正帮你在目标检测的像素级特征利用领域找到新的突破点,祝你在科研探索中持续收获创新与成长。

FJN110的博客 105

视源CVTE嵌入式面试题及参考答案(200+面试题,17万字)

内核模块如何设置? 内核模块是可在运行时动态加载到内核或从内核卸载的代码块。以下是设置内核模块的步骤: 首先,编写内核模块代码。通常使用 C 语言编写,包含必要的头文件,如<linux/init.h>、<linux/module.h>等。在代码中,需要定义模块的初始化函数和清理函数。初始化函数在模块加载时被调用,用于进行模块的初始化工作,如注册设备、分配资源等。清理函数在模块卸载时被调用,用于释放资源、注销设备等。 例如: #include <li

大模型大数据攻城狮的专栏 2202

Spring Boot + Vue 3 实现图片上传:从本地存储到云存储的完整实战指南

文件上传是Web开发中的基础功能,其核心原理是通过HTTP协议将客户端文件数据传输至服务器进行持久化存储。从技术实现看,它涉及前端FormData封装、后端MultipartFile解析、文件类型与大小校验等关键环节。这一技术的工程价值在于保障数据安全、优化用户体验并支撑高并发场景。无论是用户头像、内容配图还是本文中的“大狗狗”照片上传,都是其典型应用。本文以Spring Boot和Vue 3技术栈为例,系统拆解了从环境搭建、核心代码实现到集成阿里云OSS对象存储的完整方案,并深入探讨了安全校验、性能优化等

weixin_33851604的博客 593

Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化

在android13.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫描安装app,来加快开机时间,接下来 来实现这个功能

安卓兼职framework和app工程师的博客 1333

构建高可用文件上传服务:从预签名URL到安全防护的完整实践

文件上传是Web应用中的基础功能,其核心原理在于客户端与服务器之间的数据传输。传统服务器直传模式存在性能瓶颈和安全风险,现代架构通过引入对象存储服务(如OSS、S3)和预签名URL技术,实现了客户端直传,将文件流量与业务服务器解耦,从而显著提升系统性能和扩展性。这项技术的工程价值在于保障服务高可用的同时,降低了服务器负载和带宽成本。其典型应用场景包括用户头像、产品图片、视频内容等静态资源的上传与分发。本文聚焦于如何利用预签名URL和CDN加速,构建一个安全、高性能的文件上传服务,并深入探讨了在大文件分片上传

weixin_30315723的博客 410

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring Boot集成阿里云OSS:构建高效文件存储服务的完整指南

对象存储(Object Storage Service, OSS)是一种用于存储和管理非结构化数据的云服务,它将文件作为独立对象存储,并通过唯一URL进行访问。其核心原理在于将数据与元数据打包成对象,存储于扁平化的命名空间中,从而克服了传统文件系统目录层级复杂、扩展性差的局限。这项技术的价值在于提供了海量、弹性、高可靠且低成本的存储解决方案,尤其适用于处理图片、视频、文档等静态资源。在Web应用开发中,对象存储常被用于用户上传文件管理、静态资源托管、大数据分析等场景。本文聚焦于如何在Spring Boot项

weixin_30666401的博客 330

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Alibaba Cloud OSS 阿里云对象存储 新版

谷粒商城的教程太旧了,oss配置使用高版本springboot,springcloud一堆错误,重新整理了一下

Zxlizw的博客 729

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

关于如何自定义spring-boot-starter起步依赖

自定义spring-boot-starter起步依赖

weixin_47088824的博客 799

我开源了一款阿里云OSS的spring-boot-starter

在上一篇文章中我们介绍了如何使用SpringBoot集成阿里云oss:但是这个方式还是需要自己去写配置类去配置很多的东西,那么我在想,为什么不自己写一个阿里云OSS的spring-boot-starter呢,所以的1.0.0版本出现了,同时我也将jar包发布到了maven的中央仓库供大家使用。请使用1.0.0版本。

编码人生 1404

自定义SpringBoot的starter-阿里Oss案例

模块名:aliyun-oss-spring-boot-autoconfigure 目录结构: 1)AliOssProperties类 2)AliOssUtils类 3)AliOssAutoConfiguration 4)resources目录下加入META-INF/spring文件夹路径,并添加文件org.springframework.boot.autoconfigure.AutoConfiguration.imports,该文件用于存储自动配置类的全类名,在SpringBoot启动时将其中的自动配置类

wwb623的博客 1083

Spring Boot 自定义starter

Spring Boot 自定义starter

weixin_48881844的博客 466

阿里云对象存储OSS依赖使用报错问题临时解决方案(已有永久方案)

目前,使用阿里云OSS时,能勉强使用的版本组合为: Spring Cloud:Hoxton.SR8; Spring Boot:2.3.7.RELEASE; spring-cloud-alibaba-dependencies:2.2.0.RELEASE; spring-cloud-starter-alicloud-oss:2.2.0.RELEASE(该本版号可不指定); MyBatis Plus:3.4.1; JDK:11.0.9; Nacos:1.4.0。 这就是本文要说的临时解决方案。因为该方案无法保证启

shinyolive的博客 3835

关于自己写阿里云OSS相关工具类的自动配置(黑马web开发day14)

我们只需要在我们的aliyun-oss-spring-boot-starter引入我们的aliyun-oss-spring-boot-autoconfigure,根据依赖的传递性,我们的aliyun-oss-spring-boot-starter当中也就有了这个依赖。在aliyun-oss-spring-boot-autoconfigure这个依赖当中我们虽然定义了自动配置类,但是我们还是要创建自动配置文件,我们需要在resources中创建包和文件,并且在文件当中写入自动配置类的名字。

2302_80446546的博客 1608

阿里云 OSS 客户端直传 Policy 模式使用

一、OSS Policy 模式 Post policy 是阿里推出的一种安全的文件上传方式,在传统的方式一般都是客户端将文件上传至服务端,再由服务端将文件上传至具体的文件系统比如阿里云的OSS,这种方式不仅增加了我们服务器的带宽,而且效率也不怎么高,为此阿里提出的policy 模式,是由服务端进行签名,客户端拿到签名后的 policy 直连阿里云的OSS进行上传文件,并且阿里也提供了上传后的回调方案。 流程如下图所示: 用户要上传一个文件到OSS,而且希望将上传的结果返回给应用服务器时,需要设置一个回调函

小毕超博客 1万+

SpringBoot 自定义starter 添加第三方组件(阿里云oss为例子)

starter可以理解为一个可拔插式的插件,例如,你想使用jdbc插件,那么可以使用spring-boot-starter-jdbc(官方);如果想使用mongodb(官方),可以使用spring-boot-starter-data-mongodb(官方)。 当然我们也可以自定义starter,使其变成一个组件, 例如将微信支付,支付宝支付,阿里云oss等常见的第三方工具封装,然后给他人使用,废...

小下和的博客 4820

什么!没有Starter的阿里云OSS也能集成到SpringBoot?

实际上,我们在Maven存储库中尝试搜索阿里云OSS。在此过程中,我们会发现阿里云官方未提供一种集成Spring Boot的模式,即xxx-Springboot-Starter,显然,这是一个需要自行定制的组件。然而,如今许多企业在研发过程中,基本上90%的项目都采用了Spring Boot。因此,若有与阿里云OSS对接的需求,倘若官方已提供了相应的Spring Boot快速启动集成包,那么我们的使用将会非常便捷。然而,鉴于官方并未实施该操作,我们必须手动将其集成至Spring Boot。

编码人生 1254
上一篇: 查询出所有菜单并将其组装成父子结构
下一篇: Vue学习篇一
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值