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

news2024/11/16 13:27:36

公司内部开发了一个文件相关的应用,由于服务器带宽限制导致多个用户同时上传或者下载文件时速度很慢,遂将文件迁移至阿里云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.coloradmin.cn/o/1246488.html

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

相关文章

js检测dom变化的方法:MutationObserver

前言 检测一个原生dom的变化,如一个div的颜色,大小,所在位置,内部元素的属性是否变化,更深层dom树上的变化等等。 都可以使用一个window上暴露出来的一个api:MutationObserver 语法 官方地址:MutationObserver.MutationObserver() - Web API 接口参考 | MDN 使用new Mutat…

洗内裤的小洗衣机买啥牌子的?高质量内衣洗衣机推荐

清洗内衣内裤这些贴身衣物确实是一件比较头疼的事&#xff0c;有的小伙子由于工作的劳累通常在洗完澡后并不喜欢直接清洗内衣内裤&#xff0c;会存上几天再扔到洗衣机里&#xff0c;这样做是很不可取的&#xff0c;因为穿过的内裤很久不洗就会滋生细菌&#xff0c;另外&#xf…

一次爽个够,80款H5精品小游戏合集

前言 最近又找到了一款宝藏游戏资源分享给大家&#xff0c;包含 80 款 H5 精品小游戏&#xff0c;都是非常有趣味耐玩的游戏&#xff0c;比如植物大战僵尸、捕鱼达人、消消乐、斗地主、熊出没、飞机大战、象棋等等超级好玩的 H5 小游戏&#xff0c;让大家一次爽个够~ 本文讲解…

java spring-boot 修改打包的jar包名称

修改pom文件 <finalName>lzwd</finalName><build><finalName>lzwd</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plu…

JMeter测试报错422 Unprocessable Entity

添加HTTP信息头&#xff1a; ​ HTTP请求-》添加-〉配置元件-》HTTP信息头管理器 ​ 如果需要送json&#xff0c;需要添加Content-Type:application/json&#xff0c;否则会报【422 Unprocessable Entity】

Tomcat 配置

1&#xff1a; 打开 2&#xff1a;选择版本号&#xff0c;我这边是 1.7 3&#xff1a;添加 web 4: 添加jar包 5&#xff1a;添加 6&#xff1a;添加 Tomcat

待办委托超方便,流程审批效率大提升丨三叠云

流程委托 路径 我的流程 >> 我的待办 功能简介 我的流程增加「待办委托」功能&#xff0c;用户可以将待处理的流程审批委托他人处理。 应用场景&#xff1a; 如果当前审批人不方便审批时&#xff0c;可以委托给指定的人&#xff08;被委托人&#xff09;处理&#…

百分点科技入选《2023年央国企数字化升级研究报告》

近日&#xff0c;艾瑞咨询发布了《2023年央国企数字化升级研究报告》&#xff0c;报告总结了央国企数字化升级的方向和特点&#xff0c;并重点研究了基础平台及关键技术工具、通用及综合型应用、重要配套建设等方面。报告指出&#xff0c;数据治理是央国企数字化升级过程中的重…

2023-11-24 事业-代号s-行业数据研报网站-记录

摘要&#xff1a; 2023-11-24 事业-代号s-行业数据研报网站-记录 行业数据研报网站 1、萝卜投研&#xff1a;https://robo.datayes.com 看数据、下载研报、上市公司PE/PB研究等。2、镝数聚&#xff1a;www.dydata.io 全行业数据&报告查找下载平台&#xff0c;覆盖100行业报…

《洛谷深入浅出基础篇》P4715淘汰赛——二叉树

上链接&#xff1a;【深基16.例1】淘汰赛 - 洛谷https://www.luogu.com.cn/problem/P4715 上题干&#xff1a; 题目描述 有 2^n&#xff08;n≤7&#xff09;个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值&#xff0c;且都不相等。能力值高的国家和能力值…

掘金产业数字化,百望云荣登2023中国产业数字化新锐势力榜

日前&#xff0c;“第十届中国产业数字化大会”在南京盛大举行&#xff0c;百望云荣登“中国产业数字化新锐势力榜”&#xff0c;市场价值与方案能力再获认可&#xff01; 据悉共有50家企业登上榜单&#xff0c;本次会议作为“中国&#xff08;南京&#xff09;电子商务大会”的…

关于同一接口有多个不同实现的设计方案

关于同一接口有多个不同实现的设计方案 前言 最近公司做了一个银行相关的项目&#xff0c;告诉我公司对接了多个银行的支付&#xff0c;每个银行都有对应的接口要去对接&#xff0c;比如&#xff1a;交易申请&#xff0c;交易取消&#xff0c;支付&#xff0c;回单&#xff0…

JVM-基础

jdk7及以前&#xff1a; 通过-XX:PermSize 来设置永久代初始分配空间&#xff0c;默认值是20.75m -XX:MaxPermSize来设定永久代最大可分配空间&#xff0c;32位是64m&#xff0c;64位是82m jdk8及之后&#xff1a; 通过-XX:MetaspaceSize 来设置永久代初始分配空间&#xff…

鸿蒙系统使用hdc_std.exe使用身份证读卡器等外设USB获得权限方法

hdc_std.exe是OpenHarmony 的命令行工具&#xff0c;由于使用的开源鸿蒙开发板上面没有文件管理器&#xff0c;所以无法通过U盘等方式进行安装.hap应用。 下面是使用hdc_std.exe安装身份证读卡器的步骤&#xff1a; 1、hdc_std.exe放桌面&#xff0c;然后WINR&#xff0c;打开…

微信原生小程序构建表格模板控件

导语 在原生微信小程序开发中&#xff0c;有时候会遇到需要通过表格来呈现一定的数据&#xff0c;尽管在移动端&#xff0c;使用表格来呈现数据&#xff0c;并不是常见的&#xff0c;但是也保不齐会遇到这样的需求&#xff0c;然而在原生微信小程序中&#xff0c;也 并没有提供…

【新手解答】深入探索 C 语言:一些常见概念的解析

C语言的相关问题解答 写在最前面目录 问题1变量名与变量的关系与区别变量和数据类型形参&#xff08;形式参数&#xff09;的概念 问题2解析延伸解析对于多文件程序的理解总结 问题3类和对象变量和数据类型变量是否为抽象的数据类型&#xff1f;总结 问题4解析源文件&#xff0…

20231124给RK3399的挖掘机开发板在Andorid10下加鼠标右键返回

20231124给RK3399的挖掘机开发板在Andorid10下加鼠标右键返回 2023/11/24 12:19 百度&#xff1a;RK3399 Android10 右键返回 https://blog.csdn.net/danhu/article/details/122467256 android9/android10 鼠标右键返回(已验证) danhu 于 2022-01-13 09:46:42 发布 android10 …

【UGUI】实现跑酷游戏分数血量显示在UI中

//1.实现让玩家的金币分数显示在UI文本中 2.让血量和滑动条关联起来 这一节课主要学会获取组件并改变属性&#xff0c;举一反三&#xff01; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro;//1.实现让玩…

TrustAsia亮相Matter开发者大会,荣获Matter优秀赋能者奖

11月22日&#xff0c;由CSA&#xff08;连接标准联盟&#xff09;中国成员组主办&#xff0c;CSHIA承办的“Matter中国区开发者大会2023” 于杭州举行。 会上&#xff0c;连接标准联盟中国成员组主席宿为民博士、连接标准联盟亚洲区架构师杨莉女士、CSHIA秘书长|中智盟投资创始…

【机器学习】算法性能评估常用指标总结

考虑一个二分问题&#xff0c;即将实例分成正类&#xff08;positive&#xff09;或负类&#xff08;negative&#xff09;。对一个二分问题来说&#xff0c;会出现四种情况。如果一个实例是正类并且也被 预测成正类&#xff0c;即为真正类&#xff08;True positive&#xff0…