阿里云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为上传文件目录
           ]
     }
    ]
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

工作流引擎架构设计

一个应用MIS的系统的架构离不开工作流引擎&#xff0c;具有流程引擎思维的架构人员设计系统的时候就有流程的思维&#xff0c;他区别于过程思维&#xff0c;过程思维开发出来的系统&#xff0c;用户面对的是菜单、模块。而流程思维设计出来的系统就是发起、待办、在途、查询、近…

电子商务活动中无处不在的电商API接口|淘宝/天猫/京东/1688

我们的日常生活中无处不是API API已经成为我们日常生活中无处不在的技术&#xff0c;我们日常生活中的许多时刻都会涉及到API的应用&#xff1a; 支付API&#xff1a;支付API允许电商平台将其支付系统与第三方支付系统进行集成&#xff0c;从而为客户提供多种支付选项并实现更…

虚拟机系列:vmware和Oracle VM VirtualBox虚拟机的区别,简述哪一个更适合我?以及相互转换

一. VMware和Oracle VM VirtualBox虚拟机的区别主要体现在以下几个方面: 首先两种软件的安装使用教程如下: VMware ESXI 安装使用教程 Oracle VM VirtualBox安装使用教程 商业模式:VMware是一家商业公司,而Oracle VM VirtualBox是开源软件; 功能:VMware拥有更多的功能和…

docker安装nacos,实现和mysql容器的通信

1.下载nacos镜像 docker pull nacos/nacos-server2. 启动nacos 启动命令如下&#xff1a; docker run -d -p 8848:8848 --name nacos \ -e JVM_XMS256m \ -e JVM_XMX256m \ -e MODEstandalone \ -e SPRING_DATASOURCE_PLATFORMmysql \ -e MYSQL_SERVICE_HOST192.168.131.223…

css中flex两列布局(一列自适应其他固定)

问题 最近写一个布局的时候&#xff0c;遇到一个问题。如下图的布局。在没有图片的时候布局是正常的&#xff0c;如果有图片且设置了width:100%;height: 100%; 则会出现图片将自适应布局撑开的情况。 我的解决方式是让图片不缩放&#xff0c;图片外层再添加一个div元素。形如…

css Vue尺子样式

原生css生成尺子样式 <template><div class"page"><div class"Light"></div><div class"rile"><ul id"list"><!--尺子需要几个单位就加几个--><li></li><li></li&…

创意设计与个性化定制:酒精壁炉的独特之处

在当今家居装饰的潮流中&#xff0c;人们越来越注重个性化和创意&#xff0c;而酒精壁炉正是在这一趋势中崭露头角。它不仅成为家居的温馨之选&#xff0c;更因其设计的灵活性而成为创意焦点&#xff0c;吸引了越来越多注重家居设计的人群。 酒精壁炉的设计灵活性为家居注入了新…

kali部署ARL灯塔资产系统及使用教程

网上有很多ARL部署到centos系统的教程,但是部署到ubuntu或kali linux系统的教程都是乱七八糟,互相抄,而且没有一个能部署成功,鉴于此,写下此教程,帮助大家出坑 一、安装docker环境(网上什么弄钥匙呀,什么稳定源啊都是垃圾) 准备一个纯净的最新的kali linux系统 1、配…

巨菌草行业分析:到2027年市场规模预计将达到205.3亿元

中国菌草市场规模已逐渐扩大&#xff0c;并在各个领域发挥出其应用的巨大潜力。随着环保意识的普及和技术的不断创新&#xff0c;菌草市场有望继续保持良好的增长态势&#xff0c;为社会经济的可持续发展做出更大的贡献。 近年来&#xff0c;菌草这种新型的生态材料逐渐走进了大…

PostgreSQL Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;…

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

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

js检测dom变化的方法:MutationObserver

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

易点易动固定资产管理系统:全生命周期管理的理想选择

在现代企业中&#xff0c;固定资产管理是一项至关重要的任务。为了确保企业的资产安全、提高资产利用率&#xff0c;全面管理固定资产的生命周期至关重要。易点易动固定资产管理系统为企业提供了一种全面的解决方案&#xff0c;实现了从固定资产申购、采购、入库、领用、退库、…

docker的使用方法

文章目录 为什么要用dockerdocker安装docker工作原理docker命令docker搭建练习docker可视化docker镜像docker容器数据卷DockerFiledocker全流程Docker网络原理docker composedocker swarm 为什么要用docker 官网&#xff1a;https://www.docker.com文档地址&#xff1a;https:…

基于Vue+SpringBoot的天沐瑜伽馆管理系统

项目编号&#xff1a; S 039 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S039&#xff0c;文末获取源码。} 项目编号&#xff1a;S039&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 瑜伽课程模块2.3 课…

提供电商数据|带你简单认识天猫API接口相关参数文档调用说明

什么是API接口 API接口(Application Programming Interface Interface)是应用程序与开发人员或其他程序互相通信的方式。它允许开发者访问应用程序的数据和功能。 API接口,软件的“握手”与“交流”之道,软件世界的“好基友”。想让软件聊得来?想开发App却无从下手?API来相救…

全球最大生产基地已投产,百年京西借智能悬架谋「新生」

受相关等爆款车型的高配置率及销量带动&#xff0c;空气悬架市场热度不减。 比如&#xff0c;理想在今年的理想魔毯空气悬架技术日上宣布&#xff0c;搭载空气悬架的车型累计交付已突破20万辆&#xff0c;在所有已交付的L9、L8、L7中&#xff0c;配备空气悬架的比例达93%。 作…

清华大学提出全新加速训练大模型方法SoT

近日&#xff0c;微软研究和清华大学的研究人员共同提出了一种名为“Skeleton-of-Thought&#xff08;SoT&#xff09;”的全新人工智能方法&#xff0c;旨在解决大型语言模型(LLMs)生成速度较慢的问题。 尽管像GPT-4和LLaMA等LLMs在技术领域产生了深远影响&#xff0c;但其处…

springboot+vue基本微信小程序的旅游社系统

项目介绍 现今市面上有关于旅游信息管理的微信小程序还是比较少的&#xff0c;所以本课题想对如今这么多的旅游景区做一个收集和分类。这样可以给身边喜欢旅游的朋友更好地推荐分享适合去旅行的地方。 前端采用HTML架构&#xff0c;遵循HTMLss JavaScript的开发方式&#xff0…