菜鸟必读 网站被入侵后需做的检测 2/宁波最好的seo外包
文章目录
- 一,创建第三方服务模块thrid-party
- 1,创建一个名为`gulimall-third-party`的模块
- 2,nacos上创建third-party命名空间,用来管理这个服务的所有配置
- 3,配置pom文件
- 4,配置文件
- 5,单元测试
- 6,增加网关路由配置
- 二,后台提供生成密钥的接口
- 代码解释
- 使用说明
- 问题记录
一,创建第三方服务模块thrid-party
根据图片的架构设计,前端上传文件的步骤如下:
- ①从后台获取签名
- ②携带签名将文件上传至阿里云OSS
因此,上传文件涉及到第三方服务阿里云OSS,以后还会有第三方短信服务等,为了统一管理第三方服务,创建一个专门的模块third-party。
1,创建一个名为gulimall-third-party
的模块
2,nacos上创建third-party命名空间,用来管理这个服务的所有配置
3,配置pom文件
OSS相关的包依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>aliyun-oss-spring-boot-starter</artifactId></dependency>
4,配置文件
application.properties。
server.port=30000
alibaba.cloud.secret-key=fzQdkkAR4D1dRopvBC40d1202jgb
alibaba.cloud.access-key=LTAI5tC6QtV3C5dzq7uau
alibaba.cloud.oss.endpoint=oss-cn-hangzhou.aliyuncs.com
spring.application.name=gulimall-third-party
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
bootstrap.yml。
spring:application:name: gulimall-third-partycloud:nacos:config:server-addr: 127.0.0.1:8848namespace: 0ae75f1a-5bd3-4113-aec9-aad4a23403d7
5,单元测试
编写单元测试。
package com.atguigu.gulimall.thirdparty;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.aliyuncs.exceptions.ClientException;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.io.File;@SpringBootTest
@RunWith(SpringRunner.class)
class GulimallThirdPartyApplicationTests {@Autowiredprivate OSS ossClient;@Testvoid contextLoads() {}@Testpublic void testUpload() throws ClientException {String bucketName = "gulimallfuck";// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。String objectName = "134.png";// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。String filePath= "C:\\Users\\Lenovo\\Desktop\\1.png";// 创建OSSClient实例。try {// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));// 上传文件。PutObjectResult result = ossClient.putObject(putObjectRequest);} catch (Exception oe) {oe.printStackTrace();}}}
6,增加网关路由配置
- id: gulimall-third-partyuri: lb://gulimall-third-partypredicates:- Path=/api/thirdparty/**filters:- RewritePath=/api/thirdparty/(?<segment>.*),/$\{segment}
二,后台提供生成密钥的接口
参考阿里云OSS文档,后端生成密钥的代码如下。
package com.atguigu.gulimall.thirdparty.controller;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.model.MatchMode;
import com.aliyun.oss.model.PolicyConditions;
import com.atguigu.common.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;/*** @Description:* @Created: with IntelliJ IDEA.* @createTime: 2020-05-27 15:56**//****/
@RestController
public class OssController {@Value("${alibaba.cloud.access-key}")private String accessKeyId;@Value("${alibaba.cloud.oss.endpoint}")private String endpoint;@Autowiredprivate OSS ossClient;@RequestMapping("/oss/policy")public R policy() {String bucket = "gulimallfuck"; // 请填写您的 bucketname 。String host = "https://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint// callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());String dir = format + "/"; // 用户上传文件时指定的前缀。// 创建OSSClient实例。Map<String, String> respMap = null;try {long expireTime = 30;long expireEndTime = System.currentTimeMillis() + expireTime * 1000;Date expiration = new Date(expireEndTime);PolicyConditions policyConds = new PolicyConditions();policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);byte[] binaryData = postPolicy.getBytes("utf-8");String encodedPolicy = BinaryUtil.toBase64String(binaryData);String postSignature = ossClient.calculatePostSignature(postPolicy);respMap = new LinkedHashMap<String, String>();respMap.put("accessid", accessKeyId);respMap.put("policy", encodedPolicy);respMap.put("signature", postSignature);respMap.put("dir", dir);respMap.put("host", host);respMap.put("expire", String.valueOf(expireEndTime / 1000));} catch (Exception e) {System.out.println(e.getMessage());} finally {ossClient.shutdown();}return R.ok().put("data",respMap);}}
这段代码展示了如何生成一个预签名的策略(policy),允许客户端通过POST方式上传文件到阿里云OSS服务。policy
方法返回了一个LinkedHashMap
类型的respMap
,该映射包含了客户端上传文件所需的参数。下面是respMap
中各个键值对的作用解释:
-
accessid:
- 作用: 客户端上传文件时的身份标识,即Access Key ID。
- 用途: 验证客户端的身份。
-
policy:
- 作用: 一个Base64编码的JSON字符串,定义了上传文件的策略条件。
- 用途: 客户端上传文件时需要携带此策略,以满足预设的限制条件。
-
signature:
- 作用: 对
policy
进行签名的结果,确保策略的完整性和安全性。 - 用途: 客户端上传文件时需要携带此签名,以证明策略的有效性。
- 作用: 对
-
dir:
- 作用: 文件上传的目标目录前缀。
- 用途: 指定文件上传后的存储位置前缀,便于组织和管理文件。
-
host:
- 作用: OSS服务的访问域名。
- 用途: 客户端通过此域名发起上传请求。
-
expire:
- 作用: 策略的有效截止时间(以秒为单位的时间戳)。
- 用途: 客户端必须在此时间戳之前完成文件上传。
代码解释
假设我们想要允许客户端上传文件到名为gulimallfuck
的Bucket中,并且文件会被存储在2023-07-25/
目录下。policy
方法会生成一个策略,该策略包含以下限制:
- 文件大小范围在0到1048576000字节之间。
- 文件名必须以
2023-07-25/
开头。
客户端在发起POST请求时需要携带这些参数,以符合策略的要求。如果所有条件都满足,文件将被成功上传到OSS。
使用说明
-
客户端生成表单:
- 客户端(通常是前端JavaScript代码)会根据返回的
respMap
构建一个HTML表单,包含所有的必要字段。
- 客户端(通常是前端JavaScript代码)会根据返回的
-
表单提交:
- 当用户选择文件后,表单会通过POST方式提交到OSS服务,文件作为表单的一部分被上传。
-
OSS验证:
- OSS服务会验证
accessid
、policy
和signature
,确保它们有效且符合策略条件。
- OSS服务会验证
-
文件存储:
- 如果验证通过,文件将被存储在指定的Bucket和目录中。
问题记录
参考文章:https://blog.csdn.net/epitomizelu/article/details/140608401
相关文章:

谷粒商城实战笔记-63-商品服务-API-品牌管理-OSS获取服务端签名
文章目录 一,创建第三方服务模块thrid-party1,创建一个名为gulimall-third-party的模块2,nacos上创建third-party命名空间,用来管理这个服务的所有配置3,配置pom文件4,配置文件5,单元测试6&…...

详细介绍BIO、NIO、IO多路复用(select、poll、epoll)
BIO、NIO、IO多路复用 BIO(Blocking IO)NIO(Non-blocking IO) 同步非阻塞IOIO多路复用selectpollepoll Redis的IO多路复用 BIO(Blocking IO) 最基础的IO模型,当进行IO操作时,线程会被阻塞,直到操作完成。 比如read和write,通常IO…...

昇思25天学习打卡营第11天|xiaoyushao
今天分享ResNet50迁移学习。 在实际应用场景中,由于训练数据集不足,所以很少有人会从头开始训练整个网络。普遍的做法是,在一个非常大的基础数据集上训练得到一个预训练模型,然后使用该模型来初始化网络的权重参数或作为固定特征提…...

为什么样本方差(sample variance)的分母是 n-1?
样本均值与样本方差的定义 首先来看一下均值,方差,样本均值与样本方差的定义 总体均值的定义: μ 1 n ∑ i 1 n X i \mu\frac{1}{n}\sum_{i1}^{n} X_i μn1i1∑nXi 也就是将总体中所有的样本值加总除以个数,也可以叫做总…...

编解码器架构
一、定义 0、机器翻译是序列转换模型的一个核心问题, 其输入和输出都是长度可变的序列。 为了处理这种类型的输入和输出, 我们设计一个包含两个主要组件的架构: 第一个组件是一个编码器(encoder): 它接受一…...

追问试面试系列:JVM运行时数据区
hi 欢迎来到追问试面试系列之JVM运行时数据区,在面试中出现频率非常高,并且其中还存在一些误导性的面试,一定要注意。 什么误导性呢?面试中,有的面试官本来是想问JVM运行时数据区,不过提问时难免有些让你觉得很不爽。比如:你说说java内存模型,还比如说说JVM内存模型,…...

React Native在移动端落地实践
在移动互联网产品迅猛发展的今天,技术的不断创新使得企业越来越注重降低成本、提升效率。为了在有限的开发资源下迅速推出高质量、用户体验好的产品,以实现公司发展,业界催生了许多移动端跨平台解决方案。这些方案不仅简化了开发流程…...

《操作系统》(学习笔记)(王道)
一、计算机系统概述 1.1 操作系统的基本概念 1.1.1 操作系统的概念 1.1.2 操作系统的特征 1.1.3 操作系统的目标和功能 1.2 操作系统的发展与分类 1.2.1 手工操作阶段(此阶段无操作系统) 1.2.2 批处理阶段(操作系统开始出现࿰…...

LabVIEW学习-LabVIEW处理带分隔符的字符串从而获取数据
带分隔符的字符串很好处理,只需要使用"分隔符字符串至一维字符串数组"函数或者"一维字符串数组至分隔符字符串"函数就可以很轻松地处理带分隔符地字符串。 这两个函数所在的位置为: 函数选板->字符串->附加字符串函数->分…...

freesql简单使用操作mysql数据库
参考:freesql中文官网指南 | FreeSql 官方文档 这两天准备做一个测试程序,往一个系统的数据表插入一批模拟设备数据,然后还要模拟设备终端发送数据包,看看系统的承压能力。 因为系统使用的第三方框架中用到了freesql,…...

使用Java和Spring Retry实现重试机制
使用Java和Spring Retry实现重试机制 大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何在Java中使用Spring Retry来实现重试机制。重试机制在处理临时性故障和提高系统稳…...

Linux Vim教程(十):自定义配置与插件管理
目录 1. 概述 2. Vim 配置文件 2.1 .vimrc 文件 2.2 .gvimrc 文件 3. 自定义配置 3.1 自定义快捷键 3.2 自动命令 3.3 函数定义 4. 插件管理 4.1 插件管理工具 4.1.1 安装 vim-plug 4.1.2 配置 vim-plug 4.1.3 安装插件 4.2 常用插件 4.2.1 NERDTree 4.2.2 Fzf…...

代理协议解析:如何根据需求选择HTTP、HTTPS或SOCKS5?
代理IP协议是一种网络代理技术,可以实现隐藏客户端IP地址、加速网站访问、过滤网络内容、访问内网资源等功能。常用的IP代理协议主要有Socks5代理、HTTP代理、HTTPS代理这三种。代理IP协议主要用于分组交换计算机通信网络的互联系统中使用,只负责数据的路…...

Verilog语言和C语言的本质区别是什么?
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 用老石的一句话其实很好说…...

Delphi5实现鱼C屏幕保护程序
效果图 鱼C屏幕保护程序 添加背景图片 在additional添加image组件,修改picture属性上传图片。 这个图片可以截屏桌面,方便后面满屏不留白操作。实现无边框 即上面的“- □ ”不显示 将Form1的borderstyle属性改为bsnone实现最大化,满屏 将…...

【计算机毕业设计】844学籍管理系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...

Java之开发 系统设计 分布式 高性能 高可用
1、restful api 基于rest构建的api 规范: post delete put get 增删改查路径 接口命名 过滤信息状态码 2、软件开发流程 3、命名规范 类名:大驼峰方法名:小驼峰成员变量、局部变量:小驼峰测试方法名:蛇形命名 下划…...

java连接redis和基础操作命令
引入依赖 <!--引入java连接redis的驱动--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version></dependency> 单机模式连接redis main(){ //连接redis的信息 默认连接…...

土耳其云手机提升TikTok电商效率
在数字化飞速发展的今天,TikTok不仅是一个社交平台,更是一个巨大的电商市场。随着TikTok电商功能在全球范围内的扩展,土耳其的商家和内容创作者正面临着前所未有的机遇。本文将详细介绍土耳其云手机怎样帮助商家抓住机遇,实现业务…...

《Utilizing Ensemble Learning for Detecting Multi-Modal Fake News》
系列论文研读目录 文章目录 系列论文研读目录论文题目含义ABSTRACTINDEX TERMSI. INTRODUCTIONII. RELATED WORKA. FAKE NEWS CLASSIFICATION APPROACHES FOR SINGLE-MODALITY 单模态虚假新闻分类方法1) SINGLE-MODALITY BASED CLASSIFICATION APPROACHES USING TEXTUAL FEATUR…...

Oracle集群RAC磁盘管理命令asmcmd的使用
文章目录 ASM磁盘共享简介ASM磁盘共享的优势ASM磁盘组成ASM磁盘共享的应用场景Asmcmd简介Asmcmd的功能Asmcmd的命令Asmcmd的使用注意事项Asmcmd运行模式交互模式运行非交互模式运行ASMCMD命令分类实例管理命令:文件管理命令:磁盘组管理命令:模板管理命令:文件访问管理命令:…...

vscode插件开发笔记——大模型应用之AI编程助手
系列文章目录 文章目录 系列文章目录前言一、代码补全 前言 最近在开发vscode插件相关的项目,网上很少有关于大模型作为AI 编程助手这方面的教程。因此,借此机会把最近写的几个demo分享记录一下。 一、代码补全 思路: 读取vscode插件上鼠…...

@JSONField(format = “yyyyMMddHH“)的作用和使用
JySellerItqrdDataDO对象中的字段为: private Date crdat; 2.数据库中的相应字段为: crdat datetime DEFAULT NULL COMMENT 创建时间,2. 打印出的结果为: “crdat”:“2024072718” 年月日时分秒 3. 可以调整format的格式 4. 这样就把Date类…...

计算机网络 6.1Internet概念
第六章 Internet基础 第一节 Internet概念 一、认识Internet 1.定义:集现代计算机技术、通信技术于一体的全球性计算机互联网。 2.地位:当今世界上规模最大的计算机互联网。 3.使用协议:TCP/IP。 4.基本结构: ①主干网…...

编写SpringBoot的自定义starter包
starter项目 先来看一下Starter的官方解释: Spring Boot Starter 是一种方便的依赖管理方式,它封装了特定功能或技术栈的所有必要依赖项和配置,使得开发者可以快速地将这些功能集成到Spring Boot项目中。Spring Boot官方提供了一系列的Star…...

【LeetCode:3106. 满足距离约束且字典序最小的字符串 + 贪心】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...

25 Python常用函数——reduce()
在 Python 3.x 中,reduce() 不是内置函数,而是放到了标准库 functools 中,需要先导入再使用。 标准库 functools 中的函数 reduce() 可以将一个接受两个参数的函数以迭代累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素上&#…...

oracle登录报“ORA-27101: shared memory realm does not exist”
oracle登录报“ORA-27101: shared memory realm does not exist” 问题: 1、使用ip:1521/服务名方式连库报错" ORA-27101: shared memory realm does not exist Linux-x86_64 Error: 2: No such file or directory" 2、sqlplus XX/密码 可以登录数据库 …...

界面控件Telerik UI for WPF 2024 Q2亮点 - 全新的AIPrompt组件
Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等,创建的应用程序可靠且结构良好,非常容易维护,其直观的API将无缝地集成Visual Studio…...

IT服务运营过程中的资源要素管理(至简)
在IT服务运营管理过程中,所有资源要投入正式、连续、稳定运行,要保持规范化的管理和标准化的操作,具体包括工具管理、知识管理、服务台管理与评价、备件库管理等内容。 一、工具管理 1、工具的基本运营。见下表: 工具的基本运营…...