vue Sts认证后直传图片到阿里云OSS

后端进行sts认证生成临时身份凭证,前端通过凭证直传图片等文件到OSS中

一 OSS配置

增加用户和角色,创建OSS bucket

1.1 添加用户

登录阿里云管理控制台,右侧头像,进入访问控制

点击左侧导航栏的身份管理的用户,点击添加用户

输入名称,点击open api调用访问,确定

点击刚创建的用户,点击权限管理,点击新增授权

搜索sts,添加

在认证管理中

创建一个accesskey,并记录保存,后续需要使用

1.2 添加角色

在左侧导航栏中身份管理点击角色,创建角色

选择阿里云账号

填入有意义的名称,选择当前云账号信任

点击新创建的角色,添加授权,搜索oss,将两个权限都添加

同时,在角色信息中,将arn记录保存,后续需要使用

1.3 bucket创建

在对象存储中,创建bucket

如果需要公共读,则勾选公共读,如果仅自己读写,则选择私有,这里我选择了公共读,地域我选择了深圳,根据服务器部署位置来选

创建完成后,进入bucket,在数据安全,选择跨域设置,点击创建规则

来源为请求服务器地址,这里演示我填*

点击概览,根据自己的选择,记下访问的endpoint,这里为选择了外网访问的endpoint

二 后端配置

springboot作为后端服务

2.1 添加maven依赖

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version>
</dependency>

2.2 配置访问密钥

在yaml配置文件中添加

oss:endpoint: sts.cn-shenzhen.aliyuncs.comaccessKeyId: ram sk idaccessKeySecret: ram sk sbucket: bucket名ram: ramoss-endpoint: oss-xxx

其中

  • endpoint添加sts的endpoint,如果添加oss的endpoint会报错
  • accessKeyId 和 secret 是创建用户的accessKeyId和secret
  • ram为 创建的角色的arn
  • bucket是oss里的桶名称
  • oss-endpoint是oss的bucket的endpoint

2.3 添加控制器接受请求创建sts token

package com.fooleryang.remark.controller;/*** title:OssController* description: TODO* date: 2023/11/9* author: fooleryang* version: 1.0*/
@RestController
@RequestMapping("/api/oss")
@Slf4j
public class OssController {@Value("${oss.accessKeyId}")private String secretId;@Value("${oss.accessKeySecret}")private String secretKey;@Value("${oss.bucket}")private String bucketName;@Value("${oss.endpoint}")private String endpoint;@Value("${oss.ram}")private String  ram;@Value("${oss.ossendpoint}")private String  ossEndpoint;@GetMapping("/aly")public Map<String,String > getsts(String userEmail){try {// 添加endpoint。适用于Java SDK 3.12.0及以上版本。DefaultProfile.addEndpoint("", "Sts", endpoint);// 构造default profile。IClientProfile profile = DefaultProfile.getProfile("", secretId, secretKey);// 构造client。DefaultAcsClient client = new DefaultAcsClient(profile);final AssumeRoleRequest request = new AssumeRoleRequest();// 适用于Java SDK 3.12.0及以上版本。request.setSysMethod(MethodType.POST);request.setRoleArn(ram);//角色会话名称request.setRoleSessionName(userEmail);  //这里我通过前端传参获取,到时候可以查看文件是谁传的
//           if(!aliOss.getPolicy().isEmpty()) request.setPolicy(aliOss.getPolicy());request.setDurationSeconds(3600L);final AssumeRoleResponse response = client.getAcsResponse(request);AssumeRoleResponse.Credentials credentials = response.getCredentials();Map<String, String> result = new HashMap<String, String>();result.put("accessKeyId",credentials.getAccessKeyId());result.put("accessKeySecret",credentials.getAccessKeySecret());result.put("expiration",credentials.getExpiration());result.put("securityToken",credentials.getSecurityToken());result.put("region","oss-cn-shenzhen");result.put("bucket",bucketName);result.put("oss-endpoint",ossEndpoint);return result;}catch (Exception e) {log.error("error:"+e.getMessage());throw new RuntimeException(e);}}}

三 vue前端

先请求后端得到token,在直传到oss

3.1 导入依赖

 pnpm install ali-oss

3.2 上传功能

新建一个ts文件,用于请求后端接口得到token

这里我对axios进行了封装,请求按自己封装或者直接用axios都可

//获取临时凭证
export const getCOSSecretKey = (params) => {return http.get(`/oss/aly`,params)
}

再建一个ts文件,用于上传文件到oss

import OSS from 'ali-oss'
export const  uploadObject  = async (file, callback)  => {let fileName = file.name || ""const origin_file_name = fileName.split(".").slice(0, fileName.split(".").length - 1).join('.') // 获取文件名称// 获取当前时间戳const upload_file_name = new Date().getTime() + '.' + fileName.split(".")[fileName.split(".").length - 1] // 文件上传名称定义为当前时间戳//请求接口得到tokenlet res = await getCOSSecretKey( {"emial":"xxx"});if(!res.data) return console.error('credentials invalid')//启动OSS客户端let stsConfig = res.dataconst client = new OSS({region: stsConfig.region,// 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。accessKeyId: stsConfig.accessKeyId,accessKeySecret: stsConfig.accessKeySecret,// 从STS服务获取的安全令牌(SecurityToken)。stsToken: stsConfig.securityToken,// 填写Bucket名称,例如examplebucket。bucket: stsConfig.bucket,});if(file.size>= 10 * 1024 * 1024){ //分片上传result = await client.multipartUpload(upload_file_name, file, {// 获取分片上传进度、断点和返回值。progress: (p, cpt, res) => {// onUploadProgress&&onUploadProgress(p)},// 设置并发上传的分片数量。parallel: 4,// 设置分片大小。默认值为1 MB,最小值为100 KB。partSize: 1024 * 1024,// headers,// 自定义元数据,通过HeadObject接口可以获取Object的元数据。mime: "text/plain",timeout: 120000  // 设置超时时间});callback(result.url)}else{ result = await client.put(upload_file_name, file)callback(result.url)}
}

四 vditor 图片上传调用

在使用vditor时,可以将图片上传到oss然后将返回的url插入到vditor中

具体过程如下:

4.1 vditor配置

创建vditor对象时加入upload配置
callback会将返回的url进行插入到内容中
vditor.value = new Vditor('vditor',{upload: {accept: "image/*",multiple: false,filename(name) {return name.replace(/[^(a-zA-Z0-9\u4e00-\u9fa5\.)]/g, "").replace(/[\?\\/:|<>\*\[\]\(\)\$%\{\}@~]/g, "").replace("/\\s/g", "");},handler(files) {function callback(path) {let name = files[0] && files[0].name;let succFileText = "";// if (vditor && vditor.value.currentMode === "wysiwyg") {succFileText += `\n <img alt=${name} src="${path}">`;// } else {// succFileText += `  \n![${name}](${path})`;// }document.execCommand("insertHTML", false, succFileText);}handleImageUpload(files, callback);},url(files, callback) {handleImageUpload(files, callback);}}}
)

4.2 自定义图片上传

这里就调用了步骤三中的上传功能,上传到OSS中

const handleImageUpload = async (file,callback) => {let res = await uploadObject(file,(url)=>{callback(url)})
}

4.3 最终结果

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

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

相关文章

基于Python优化图片亮度与噪点

支持添加噪点类型包括&#xff1a;添加高斯噪点、添加椒盐噪点、添加波动噪点、添加泊松噪点、添加周期性噪点、添加斑点噪点、添加相位噪点&#xff0c;还提供清除噪点的功能。 我们先看一下实测效果&#xff1a;&#xff08;test.jpg为原图&#xff0c;new.jpg为添加后的图片…

学习网络编程No.9【应用层协议之HTTPS】

引言&#xff1a; 北京时间&#xff1a;2023/10/29/7:34&#xff0c;好久没有在周末早起了&#xff0c;该有的困意一点不少。伴随着学习内容的深入&#xff0c;知识点越来越多&#xff0c;并且对于爱好刨根问底的我来说&#xff0c;需要了解的知识就像一座大山&#xff0c;压得…

第2关:还原键盘输入(list)

题目&#xff1a; 知识点&#xff1a; 列表list相较于数组&#xff1a; 优势&#xff1a;可在任意指定位置插入或者删除元素而不影响列表其他地方 。 劣势&#xff1a;无法直接进行下标索引&#xff0c;需要迭代器it逐个遍历。 代码&#xff1a; #include <iostream>…

库存预占架构升级方案设计-交易库存中心

背景介绍 &#xfeff; 伴随物流行业的迅猛发展&#xff0c;一体化供应链模式的落地&#xff0c;对系统吞吐、系统稳定发出巨大挑战&#xff0c;库存作为供应链的重中之重表现更为明显。近三年数据可以看出&#xff1a; &#xfeff;&#xfeff; 接入商家同比增长37.64%、货…

CLIP:万物分类(视觉语言大模型)

本文来着公众号“AI大道理” ​ 论文地址&#xff1a;https://arxiv.org/abs/2103.00020 传统的分类模型需要先验的定义固定的类别&#xff0c;然后经过CNN提取特征&#xff0c;经过softmax进行分类。然而这种模式有个致命的缺点&#xff0c;那就是想加入新的一类就得重新定义…

零基础快速上手STM32开发(手把手保姆级教程)

零基础快速上手STM32开发&#xff08;手把手保姆级教程&#xff09; 1. 前言 作为一名嵌入式工程师&#xff0c;STM32 是必须要学习的一款单片机&#xff0c;同时这款单片机资料足够多&#xff0c;而且比较简单&#xff0c;非常适合初学者入门。 STM32 是一款由 STMicroelec…

双H桥直流马达步进电机驱动芯片SS8833E

由工采网代理的率能SS8833E是一款适用于有刷直流或双极步进电机的集成电机驱动芯片&#xff1b;采用eTSSOP16封装&#xff1b;该器件集成了两个PNMOS H桥和电流调节电路&#xff1b;电机输出电流可以由外部脉宽调制器&#xff08;PWM&#xff09;或内部PWM电流控制器控制。 工…

【Java 进阶篇】JQuery DOM操作:通用属性操作的绝妙魔法

在前端的舞台上&#xff0c;JQuery犹如一位魔法师&#xff0c;为我们展现了操纵HTML元素的奇妙技巧。而在这个技巧的精妙组成中&#xff0c;通用属性操作是一门绝妙的魔法。在本篇博客中&#xff0c;我们将深入研究JQuery DOM操作中的通用属性操作&#xff0c;揭示这段魔法的神…

11.13 牛客刷题8/10

11.13 信号完整性 指针地址 的加减&#xff0c;注意 最后转为16进制

leetCode 25.K 个一组翻转链表

给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。k 是一个正整数&#xff0c;它的值小于 或 等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值&a…

【PIE-Engine 数据资源】全球250米LAI产品

文章目录 一、 简介二、描述三、波段四、示例代码参考资料 一、 简介 数据名称全球250米LAI产品时间范围2015年空间范围全球数据来源北京师范大学肖志强教授团队代码片段var images pie.ImageCollection(“BNU/LAI/GLOBAL-250”) 二、描述 全球 250 米叶面指数产品由北京师范…

本地PHP搭建简单Imagewheel私人云图床,在外远程访问——“cpolar内网穿透”

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

产品化的GPT,能否为“百模大战”照亮未来?

这两天&#xff0c;AI圈都处在一种莫名的震撼感当中。 北京时间 11月7日&#xff0c;OpenAI 举办了首次DevDay开发者日活动。活动现场发布了非常多内容&#xff0c;其中有一些按部就班的&#xff0c;比如技术上更新了最新版本的GPT-4 Turbo。也有一些让从业者目瞪口呆&#xff…

高速高精运动控制,富唯智能AI边缘控制器助力自动化行业变革

随着工业大数据时代的到来&#xff0c;传统控制与决策方式无法满足现代数字化工厂对工业大数据分析与决策的需求&#xff0c;AI边缘控制器赋能现代化智慧工厂&#xff0c;实现工业智造与行业变革。 富唯智能AI边缘控制器&#xff0c;基于x86架构的IPC形态产品&#xff0c;通过…

python爬虫hook定位技巧、反调试技巧、常用辅助工具

一、浏览器调试面板介绍 二、hook定位、反调试 Hook 是一种钩子技术&#xff0c;在系统没有调用函数之前&#xff0c;钩子程序就先得到控制权&#xff0c;这时钩子函数既可以加工处理&#xff08;改变&#xff09;该函数的执行行为&#xff0c;也可以强制结束消息的传递。简单…

视觉大模型DINOv2:自我监督学习的新领域

1 DINOv2 1.1 DINOv2特点 前段时间&#xff0c;Meta AI 高调发布了 Segment Anything&#xff08;SAM&#xff09;&#xff0c;SAM 以交互式方式快速生成 Mask&#xff0c;并可以对从未训练过的图片进行精准分割&#xff0c;可以根据文字提示或使用者点击进而圈出图像中的特定…

【Git】第四篇:基本操作(理解工作区、暂存区、版本库)

Git 工作区、暂存区和版本库 工作区&#xff1a;就是我们创建的本地仓库所在的目录暂存区&#xff1a; stage或index&#xff0c;一般放在.git(可隐藏文件)目录下的index文件&#xff08;.git/index&#xff09;中&#xff0c;所以我们把暂存区有时候也叫做索引&#xff08;in…

JVM:如果是你,你如何解决跨代引用的问题?(记忆集和卡集)

这部分内容主要是为了稍后介绍各款垃圾收集器时做前置知识铺垫&#xff0c;如果对这部分内容感到枯燥或者疑惑&#xff0c;可以先放下看&#xff0c;等后续遇到要使用它们的实际场景、实际问题时再结合问题&#xff0c;再回来阅读和理解。 记忆集和卡集 前面在分代收集理论那…

【Java 进阶篇】JQuery DOM操作:舞动网页的属性魔法

在前端的舞台上&#xff0c;属性操作是我们与HTML元素进行互动的关键步骤之一。而JQuery&#xff0c;这位前端开发的巫师&#xff0c;通过简洁而强大的语法&#xff0c;为我们提供了便捷的属性操作工具。在这篇博客中&#xff0c;我们将深入研究JQuery DOM操作中的属性操作&…

FPGA与STM32_FSMC总线通信实验

FPGA与STM32_FSMC总线通信实验 内部存储器IP核的参数设置创建IP核FPGA代码STM32标准库的程序 STM32F407 上自带 FSMC 控制器&#xff0c;通过 FSMC 总线的地址复用模式实现STM32 与 FPGA 之间的通信&#xff0c;FPGA 内部建立 RAM 块&#xff0c;FPGA 桥接 STM32 和 RAM 块&…