JS获取阿里云oss私有图片需要通过SDK加签名访问问题

news2024/9/23 21:27:43

文章目录

    • 一、问题背景
    • 二、了解一些概念
      • 1. 防盗链
      • 2. 公有和私有两种链接的区别
    • 三、下载SDK的地址
    • 四、js的SDK对url加签名实现方法
      • 实现示例
    • 五、另外
      • 1. 跨域问题
    • 六、文章用到的官方文档链接


一、问题背景

我们项目中平时需求都是上传一张原始图片到阿里云OSS公共空间,通过简单的url携带参数的形式,获取各种操作之后的图片,很方便的。图片允许任何人(包括匿名访问者)都可以对该 Bucket 中的文件进行读操作。文件URL的格式为 https://BucketName.Endpoint/ObjectName。其中,ObjectName需填写包含文件夹以及文件后缀在内的该文件的完整路径

但是这次的需求是上传公司的印章,属于比较隐私的,不想让没有访问权限的人读,所以需要上传到私有空间,但是上传私有空间,则必须进行 签名 操作。私有文件URL的格式为https://BucketName.Endpoint/Object?签名参数

引用官方文档的原话 对于不允许匿名访问的私有图片文件,不支持通过文件URL直接添加参数的方式处理图片,您需要通过SDK的方式将图片处理操作加入签名URL中

在这里插入图片描述

好了,下一步我们就去找SDK,通过SDK在 url 中加签名。

二、了解一些概念

在开始之前先了解几个概念。

1. 防盗链

直接从数据库拿到的url是不能访问oss的图片的,由于oss是按照点击请求收费的,把oss设置为私有能防止网络黑客攻击而导致费用增加。通过签名算法给url加上签名标签和访问时效,给url一个临时授权才能访问到,过了访问时间这个url又变成无效,即防盗链。

数据库中拿到的url访问oss的图片会提示 403 没有权限(如果上传到公共空间是可以直接访问oss图片的)

简单来说,阿里云OSS 将文件夹的权限设置成私有的情况下,就需要先获取到签名才可以访问。类似一些用户的身份证照片,比较隐私的图片等。都可以设置防盗链来防止黑客获取。

2. 公有和私有两种链接的区别

数据库拿到的和oss设置为公共可读的链接

https:/yourbucket-public.oss-cn-hangzhou.aliyuncs.com/seal/tKUPnBPQc.jpg

oss设置为私密的链接和我们通过签名算法得到的链接

http://yourbucket-private.oss-cn-hangzhou.aliyuncs.com/seal/tKUPnBPQc.jpg?OSSAccessKeyId=****79acT97KJAbPuhx***&Expires=1698472190&Signature=****ZJLpRwmJa1DKfn4zqGltk****

可以看到有三个参数OSSAccessKeyId(即AccessKeyId)、Expires(链接失效时间)、Signature(签名算法获得的签名)

三、下载SDK的地址

OSS官方文档 在URL中包含签名 提供各语言SDK生成签名URL的方法,就是没有javaScript的SDK !!!
无奈只能继续百度了,然后看到一篇文章给提供下载链接 阿里云oss签名sdk,我下载的是min.js,放到自己项目中。

四、js的SDK对url加签名实现方法

一开始我还是按照传 公有空间 那样处理的url,比如 https:/yourbucket-private.oss-cn-hangzhou.aliyuncs.com/seal/tKUPnBPQc.jpg
图片倒是能上传到OSS上,但是页面上的图片报错 403 Forbidden,导致上传的图片在前端页面上显示不出来,原因是没有权限读取私有空间的存储。

错误效果如下:
在这里插入图片描述

在这里插入图片描述

幸得同事告知传 私有空间 的话url需要加签名,实际需要这种url。
在这里插入图片描述

实现示例

1)前端可以直接 npm下载 ali-oss

npm install ali-oss

2)由于js库是es5,此处使用require引入

const OSS = require('./aliyun-oss-sdk.min.js')

3)根据文档配置传参,这四个参数都是必填项

const OSS = require('./aliyun-oss-sdk.min.js')

export const client = new OSS({
  // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'oss-cn-hangzhou',
  // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  accessKeyId: yourAccessid,
  accessKeySecret: yourAccesskey,
  // 填写存储空间名称。
  bucket: 'your-private'
})

4)需要的地方调用 signatureUrl() 方法进行签名

import { client } from './ossData'
let url = 'seal/tKUPnBPQc.jpg'
const signUrl = client.signatureUrl(url, {expires: 3600}) // 上传私有空间url加参数及生成签名

console.log('签名前:' + url)
console.log('签名后:' + signUrl)

在这里插入图片描述

五、另外

1. 跨域问题

上传一开始会报错跨域问题,这个的话可以去问运维或者后端,他们有权限可以帮忙给配置下。

六、文章用到的官方文档链接

使用文件URL分享文件
图片处理的3种操作方式
阿里云OSS文档 - 在URL中包含签名
阿里云oss签名sdk

参考文章链接:
前端js获取阿里云oss私有图片加参数及生成签名signature
uniapp解决阿里云OSS获取图片时私有Bucket(防盗链)的签名问题
前端-- 微信小程序图片直传阿里云OSS(bucket私有权限)和防盗链之URL签名标签的实现—总结(排坑)篇

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

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

相关文章

利用OSG和GLSL实现彩色图转为灰度图

目录 1. 前言 2. 开发环境说明 3. 预备知识 4. 功能实现 4.1. 代码 4.2. 代码说明 5. 附加说明 1. 前言 灰色图片其rgb值是一样的,比如(0.5, 0.5, 0.5)就是一张灰度图。彩色转黑白算法有很多种。因此由彩色转黑白关键就是由彩色的rgb算出灰度gray&#xff0…

7+共病思路。WGCNA+多机器学习+实验简单验证,易操作

今天给同学们分享一篇共病WGCNA多机器学习实验的生信文章“Shared diagnostic genes and potential mechanism between PCOS and recurrent implantation failure revealed by integrated transcriptomic analysis and machine learning”,这篇文章于2023年5月16日发…

数据结构与算法解析(C语言版)--搭建项目环境

本栏目致力于从0开始使用纯C语言将经典算法转换成能够直接上机运行的程序,以项目的形式详细描述数据存储结构、算法实现和程序运行过程。 参考书目如下: 《数据结构C语言版-严蔚敏》 《数据结构算法解析第2版-高一凡》 软件工具: dev-cpp 搭…

调试AOSP源码的官方神器-Android Studio for Platform(ASfP)

文章目录 下载安装启动AOSP导入调试不足 欢迎关注微信公众号ZZH的Android 下载 下载地址平台版 Android Studio 由于该工具在调试源码时需要对AOSP进行编译,所以目前只有Ubuntu版本,后续应该也只会有Ubuntu版本。 Ubuntu环境下显示可下载 Windows系统…

【Redis】认识Redis-特点特性应用场景对比MySQL重要文件及作用

文章目录 认识redisredis的主要特点redis的特性(优点)redis是单线程模型,为什么效率这么高,访问速度这么快redis应用场景redis不可以做什么MySQL和Redis对比启动RedisRedis客户端Redis重要文件及作用 认识redis redis里面相关的小…

SHCTF2023 山河CTF Reverse Week3 --- ststst easyre WP详解

文章目录 [WEEK3]ststst[WEEK3]easyre [WEEK3]ststst 64 bit 的 ELF 文件 sub_400763点进去看看 mprotect ,这个 这一题是SMC TEA的考察,我写过一篇关于 SMC学习网鼎杯jocker 可以使用idapython写脚本自动修复,也可以使用动态调试&#x…

吉他、班卓琴和贝斯吉他降分器:Arobas Music Guitar 8.1.1

Arobas Music Guitar 是一款专业的吉他、班卓琴和贝斯吉他降分器。在熟练的手中,它不仅可以让您创作,还可以编辑、聆听和录制,以及导入和导出乐谱。如果有人感兴趣的话,录音是在八个轨道上进行的,你可以为每个轨道单独…

1.8 网络安全模型

思维导图: 1.8 网络安全模型笔记: 网络安全模型核心概念: 消息在Internet上从发送方传送至接收方,涉及到源地址、目的地址、通信协议(如TCP/IP)的使用。信息交换的双方需要合作保证交换的可靠性。 安全技术核心组成…

发布一款CAN总线接口的GPS模块

一、模块硬件介绍 GNSS模块:u-blox M9N,支持北斗、GPS、格洛纳斯和伽利略四系统并发处理陶瓷天线:太盟PA025AZ009,支持北斗、GPS、格洛纳斯三系统。根据太盟的回复,25*25*4尺寸的陶瓷天线无法做到完美的四系统兼容&am…

软考系统架构师知识点集锦十:计算机网络、数学与经济管理、知识产权与标准化

一、计算机网络 1.1、考情分析 2.1 TCP/IP协议簇 2.1.1常见协议及功能 网际层是整个TCP/IP体系结构的关键部分,其功能是使主机可以把分组发往任何网络并使分组独立地传向目标。 POP3: 110 端口,邮件收取SMTP: 25 端口,邮件发送FTP: 20数据端口/21控制…

最优值函数

一、最优状态值函数 解决强化学习任务大致上意味着找到一种政策,能够在长期内实现很多奖励。对于有限MDPs,我们可以精确地定义一种最优政策,其定义如下。值函数定义了政策的一种部分排序。如果一个政策的预期回报大于或等于另一个政策π0在所…

VS Code2023安装教程(最新最详细教程)附网盘资源

目录 一.简介 二.安装步骤 三.VS Code 使用技巧 网盘资源见文末 一.简介 VS Code是一个由微软开发的跨平台的轻量级集成开发环境(IDE),被广泛用于编写各种编程语言的代码。它支持多种编程语言,并且可以通过插件扩展功能。 以…

读图数据库实战笔记04_路径与图变异

1. Groovy 1.1. Java编程语言的一个超集 1.2. Gremlin Console的一个特性是能和Groovy配合使用 1.2.1. Gremlin Console会自动地迭代结果 1.3. 从技术上说,Gremlin Console就是Groovy交互式解释器(read-eval-print loop,REPL)…

一篇博客理解Recyclerview的使用

从Android 5.0开始,谷歌公司推出了RecylerView控件,当看到RecylerView这个新控件的时候,大部分人会首先发出一个疑问,recylerview是什么?为什么会有recylerview也就是说recylerview的优点是什么?recylerview怎么用&…

图像视觉特效处理工具:Boris FX Optics 2024.0.1

BorisFX光效插件Optics首发2024版:3大新功能详解 2023年9月15日,全球领先的视觉后期软件开发公司BorisFX推出了旗下知名软件Boris FX Optics的全新2024版本,这款备受后期处理爱好者喜爱的Photoshop插件和独立程序再次升级,为您的…

【PC】特殊空投-2023年10月

亲爱的玩家朋友们,大家好! 10月特殊空投活动来袭。本月我们也准备了超多活动等着大家来体验。快来完成任务获得丰富的奖励吧!签到活动,每周一次的PUBG空投节,还有可以领取PGC2023免费投票劵的活动等着大家!…

聊聊统一认证中的四种安全认证协议(干货分享)

大家好,我是陈哈哈。单点登录SSO的出现是为了解决众多企业面临的痛点,场景即用户需要登录N个程序或系统,每个程序与系统都有不同的用户名和密码。在企业发展初期,可能仅仅有几个程序时,管理账户和密码不是一件难事。但…

软考系统架构师知识点集锦九:数据库系统

一、考情分析 二、考点精讲 2.1数据库概述 2.1.1数据库模式 (1)三级模式:外模式对应视图,模式(也称为概念模式)对应数据库表,内模式对应物理文件。(2)两层映像:外模式-模式映像,模式-内模式映像;两层映像可以保证数据库中的数据具有较高的…

linux查看系统版本、内核信息、操作系统类型版本

1. 使用 uname 命令:这将显示完整的内核版本信息,包括内核版本号、主机名、操作系统类型等。 uname -a2. 使用 lsb_release 命令(仅适用于支持 LSB(Linux Standard Base)的发行版):这将显示包含…

reactos 可调试光盘映像

链接:https://pan.baidu.com/s/13M9BZN4IDrWLc3bjnHO79g?pwd0gst 提取码:0gst