阿里云OSS代码集成部分问题分析

公司内部开发了一个文件相关的应用,由于服务器带宽限制导致多个用户同时上传或者下载文件时速度很慢,遂将文件迁移至阿里云OSS服务器。下面是迁移的过程中遇到的部分问题。

问题1. 跨域错误

错误信息如下:

Access to XMLHttpRequest at 'http://xxx.oss-cn-hangzhou.aliyuncs.com/test/logo.jpg' from origin 'http://192.168.29.131:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

该问题按照以下步骤正确配置跨域规则。

  1. 登录OSS管理控制台。
  2. 单击Bucket 列表,然后单击目标Bucket名称。
  3. 在左侧导航栏,选择数据安全 > 跨域设置
  4. 跨域设置页面,单击创建规则
  5. 创建跨域规则面板,按以下说明配置各项参数,其他参数保留默认配置。
    • 来源:设置为*
    • 允许Methods:选中GETPOSTPUTDELETEHEAD
    • 允许Headers:设置为*
    • 暴露Headers:设置为指定值或者不填。
  6. 单击确定

问题2. Access denied by authorizer’s policy.

具体错误代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access denied by authorizer's policy.</Message><RequestId>655EED1451FCAD1916A298B4</RequestId><HostId>xxx.oss-cn-hangzhou.aliyuncs.com</HostId><AccessDeniedDetail><PolicyType>SessionPolicy</PolicyType><AuthPrincipalOwnerId>1883463381918383</AuthPrincipalOwnerId><AuthPrincipalType>AssumedRoleUser</AuthPrincipalType><AuthPrincipalDisplayName>devram:251264809289383873</AuthPrincipalDisplayName><NoPermissionType>ImplicitDeny</NoPermissionType><AuthAction>oss:PutObject</AuthAction></AccessDeniedDetail><EC>0003-00000301</EC><RecommendDoc>https://api.aliyun.com/troubleshoot?q=0003-00000301</RecommendDoc>
</Error>

问题解析:

Web端上传文件至OSS服务器,为避免暴露阿里云账号访问密钥(AccessKey ID和AccessKey Secret),通常临时访问凭证的方式执行OSS相关操作。
临时访问凭证包括临时访问密钥(AccessKey ID和AccessKey Secret)和安全令牌(SecurityToken)。
在获取访问密钥(AccessKey ID和AccessKey Secret)和安全令牌(SecurityToken)时,需要制定策略(Policy),而策略中则指定了权限以及资源目录等内容。如下:

{"Version": "1","Statement": [{"Effect": "Allow","Action": ["oss:PutObject" // 上传文件权限],"Resource": ["acs:oss:*:*:examplebucket/xxx/*", // examplebucket为bucket名称,其中xxx为上传文件目录]}]
}

注意:需要配置Action以及Resource,并且Resource中指定的目录需要与实际目录一致
详细解决方案见:https://api.aliyun.com/troubleshoot?q=0003-00000301

问题3. The security token you provided has expired.

详细错误代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SecurityTokenExpired</Code><Message>The security token you provided has expired.</Message><RequestId>655EED5451FCAD1916A298B4</RequestId><HostId>xxx.oss-cn-hangzhou.aliyuncs.com</HostId><SecurityToken>CAISowJ1q6Ft5B2yfSjIr5xxxx</SecurityToken><EC>0002-00000007</EC><RecommendDoc>https://api.aliyun.com/troubleshoot?q=0002-00000007</RecommendDoc>
</Error>

获取访问密钥(AccessKey ID和AccessKey Secret)和安全令牌(SecurityToken)时需要指定一个有效时间,超时即失效,再次上传文件则会报如上信息。
WEB端aliyun-oss-sdk-6.18.0.min.js创建OSS上传对象,可以指定刷新token方法,如下:

 const client = new OSS({// yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。region: "yourRegion",// 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。accessKeyId: "yourAccessKeyId",accessKeySecret: "yourAccessKeySecret",// 从STS服务获取的安全令牌(SecurityToken)。stsToken: "yourSecurityToken",// 填写Bucket名称。bucket: "examplebucket",retryMax: 3, // 需指定retryMax,否则refreshSTSToken无法执行refreshSTSToken: async() => {// 向您搭建的STS服务获取临时访问凭证。const info = await fetch('xxx/xxxx/get-token')return {accessKeyId: info.accessKeyId,accessKeySecret: info.accessKeySecret,stsToken: info.securityToken}},// 刷新临时访问凭证的时间间隔,单位为毫秒。refreshSTSTokenInterval: 1000})

指定refreshSTSToken方法后,在执行文件上传时若token超时,则会自动刷新token并上传文件。值得注意的时单单指定refreshSTSToken方法并不会达成预期效果,需要同时指定retryMax参数才行(参考issue:https://github.com/ali-sdk/ali-oss/issues/1179)。

问题4. 部分文件无法预览、下载

部分类型文件(如pdf)文件无法在浏览器中预览或下载,错误截图如下:在这里插入图片描述
登录OSS服务器后台管理平台,在文件列表查看文件,发现文件类型不是预期的类型:
在这里插入图片描述
出现该问题大概率是由于上传文件时指定的Content-Type错误造成的,上传文件不指定Content-Type即可。

问题5. 浏览器下载文件错误

通过OSS.signatureUrl方法转换的url,通过浏览器地址栏访问下载报AccessDenied错误。详细错误如下:

<Error><Code>AccessDenied</Code><Message>Access denied by authorizer's policy.</Message><RequestId>65600B6235EB2631229B98CB</RequestId><HostId>xxx.oss-cn-hangzhou.aliyuncs.com</HostId><AccessDeniedDetail><PolicyType>SessionPolicy</PolicyType><AuthPrincipalOwnerId>1883463381918303</AuthPrincipalOwnerId><AuthPrincipalType>AssumedRoleUser</AuthPrincipalType><AuthPrincipalDisplayName>devram:251264809289383873</AuthPrincipalDisplayName><NoPermissionType>ImplicitDeny</NoPermissionType><AuthAction>oss:GetObject</AuthAction></AccessDeniedDetail><EC>0003-00000301</EC><RecommendDoc>https://api.aliyun.com/troubleshoot?q=0003-00000301</RecommendDoc>
</Error>

由错误信息中的<AuthAction>oss:GetObject</AuthAction>可知获取访问密钥(AccessKey ID和AccessKey Secret)和安全令牌(SecurityToken)时未配置GetObject权限。在获取密钥和安全令牌时指定GetObject权限即可。如下:

{"Version": "1","Statement": [{"Effect": "Allow","Action": ["oss:PutObject", // 上传文件权限"oss:GetObject" // 下载文件权限],"Resource": ["acs:oss:*:*:examplebucket/xxx/*", // examplebucket为bucket名称,其中xxx为上传文件目录]}]
}

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

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

相关文章

【ChatGLM2-6B】Docker下部署及微调

【ChatGLM2-6B】小白入门及Docker下部署 一、简介1、ChatGLM2是什么2、组成部分3、相关地址 二、基于Docker安装部署1、前提2、CentOS7安装NVIDIA显卡驱动1&#xff09;查看服务器版本及显卡信息2&#xff09;相关依赖安装3&#xff09;显卡驱动安装 2、 CentOS7安装NVIDIA-Doc…

马斯克星链与芯事:30亿美元炸出卫星互联网革命,GPU算力创无限可能

★卫星互联网&#xff1b;算力&#xff1b;卫星通信&#xff1b;互联网&#xff1b;低轨卫星互联网&#xff1b;5G基础设施&#xff1b;GPT-4 Turbo&#xff1b;算力&#xff1b;地面通信&#xff1b;液冷&#xff1b;水冷&#xff1b;AI服务器&#xff1b;东数西算&#xff1b…

【MySQL】内连接和外连接

内连接和外连接 前言正式开始内连接外连接左外连接右外连接 前言 前一篇讲多表查询的时候讲过笛卡尔积&#xff0c;其实笛卡尔积就算一种连接&#xff0c;不过前一篇讲的时候并没有细说连接相关的内容&#xff0c;本篇就来详细说说表的连接有哪些。 本篇博客中主要用到的还是…

SQL Server Profiler基础使用

文章目录 SQL Server Profiler基础使用简介如何打开直接打开Microsoft SQL Server Management Studio工具栏打开 配置跟踪新建跟踪跟踪属性配置常规配置事件选择 启动跟踪跟踪时执行脚本跟踪记录 暂停跟踪停止跟踪 SQL Server Profiler基础使用 简介 一个图形界面工具&#x…

HR9110H 单通道低压 H 桥电机驱动芯片

HR9110H为消费类产品、玩具和其它低电压或者电池供电的运动控制类应用提供了一个集成的电机驱动器解决方案。HR9110H是SOP8封装&#xff0c;且是无铅产品&#xff0c;符合环保标准。 HR9110H能够驱动一个直流有刷电机或其他诸如螺线管的器件。输出驱动模块由PMOSNMOS功率管构成…

前端(HTML + CSS + JS)

文章目录 一、HTML1. 概念&#xff08;1&#xff09;HTML 文件基本结构&#xff08;2&#xff09;HTML代码框架 2. 、HTML常见标签 二、CSS1. CSS基本语法规范2. 用法&#xff08;1&#xff09; 引用方式&#xff08;2&#xff09;选择器&#xff08;3&#xff09;常用元素属性…

Django JSONField/HStoreField SQL注入漏洞(CVE-2019-14234)

漏洞描述 Django 于2019年8月1日 日发布了安全更新&#xff0c;修复了 JSONField 和 HStoreField 两个模型字段的 SQL 注入漏洞。 参考链接&#xff1a; Django security releases issued: 2.2.4, 2.1.11 and 1.11.23 | Weblog | DjangoDjango JSONField SQL注入漏洞&#x…

记录华为云服务器(Linux 可视化 宝塔面板)

文章目录 前言一、购买-配置选型二、重置密码三、登陆服务器使用macOS系统自带的终端&#xff08;Terminal&#xff09;使用移动设备登录下载华为云App连接云服务器 总结如有启发&#xff0c;可点赞收藏哟~ 前言 花了&#xffe5;88.02大洋开启个人服务器搭建之旅~ 当前为Linu…

“圆柱-计算公式“技术支持网址

该软件可以计算圆柱的底面圆周长、底面积、侧面积和体积。 您在使用中有遇到任何问题都可以和我们联系。我们会在第一时间回复您。 邮箱地址&#xff1a;elmo30zeongmail.com 谢谢&#xff01;

网安融合新进展:Check Point+七云网络联合研发,加固大型企业边缘、分支侧安全

AI 爆火、万物互联&#xff0c;底层需要更灵活的网络设施提供支撑。据国际分析机构 Gartner 预测&#xff0c;到 2024 年&#xff0c;SD-WAN&#xff08;软件定义的广域网&#xff09;使用率将达到 60%。不过边缘和终端兴起&#xff0c;未经过数据中心的流量也在成为新的安全风…

vue 通过ref调用router-view子组件的方法

由于用的vue2.7版本&#xff0c;但用了vue3 setup的语法&#xff1b; 注意&#xff1a;是vue2的template结构&#xff0c;vue3的setup语法&#xff1b;非这种情况需要举一反三。 处理方案&#xff1a; 1、对router-view加上ref template修改 直接对router-view加上ref&#x…

编程入门基础知识,编程入门推荐,中文编程工具下载,软件定制开发

编程入门基础知识&#xff0c;编程入门推荐&#xff0c;中文编程工具下载&#xff0c;软件定制开发 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型…