文章目录

  • 前言
  • 遇到的问题
    • 1. NoSuchBucket : The specified bucket does not exist.
    • 2. com.aliyuncs.exceptions.ClientException: InvalidParameter.RoleSessionName : The parameter RoleSessionName is wrongly formed.
    • 3. 报错:Access to XMLHttpRequest at '上传url' from origin '本地url' 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.
    • 4.报错:Multipart upload 'xxx' failed === ConnectionTimeoutError: Connect timeout for 60000ms
    • 5. 报错:Error: Please set the etag of expose-headers in OSS
    • 6. 报错:OperationNotSupportedError: This operation don't support x-oss-storage-class.

前言


遇到的问题

1. NoSuchBucket : The specified bucket does not exist.

这个问题出现在执行下面这条代码时:

// 添加endpoint(直接使用STS endpoint,前两个参数留空,无需添加region ID)
DefaultProfile.addEndpoint("", "", "Sts", ENDPOINT);
// 进行角色授权 构造default profile(参数留空,无需添加region ID)
IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
// 用profile构造client
DefaultAcsClient client = new DefaultAcsClient(profile);
final AssumeRoleRequest request = new AssumeRoleRequest();
request.setMethod(MethodType.POST);
request.setRoleArn(roleArn);  // role-Arn
request.setRoleSessionName(roleSessionName);request.setDurationSeconds(durationSeconds);  // 3600s
// 针对该临时权限可以根据该属性赋予规则,格式为json,没有特殊要求,默认为空
// request.setPolicy(policy); // Optional
final AssumeRoleResponse response = client.getAcsResponse(request);
AssumeRoleResponse.Credentials credentials = response.getCredentials();
final AssumeRoleResponse response = client.getAcsResponse(request);

然后找资料无意中发现有位博主特意最后提示了一句:

endpoint 不是 oss 的 endpoint 而是 sts 的 endpoint.
如果用了oss的endpoint,则会报错:bucket not exists.

补:参考sts文档链接:sts接入点

2. com.aliyuncs.exceptions.ClientException: InvalidParameter.RoleSessionName : The parameter RoleSessionName is wrongly formed.

原因是 roleSessionName 我设置成了空串。

private static final String roleSessionName = "";

改为:

private static final String roleSessionName = "alice";

官方该参数给的示例而已,可能不能为空串吧。

3. 报错:Access to XMLHttpRequest at ‘上传url’ from origin ‘本地url’ 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.

具体报错信息截图:


看到这个第一时间其实我就想到了是阿里云控制台跨域规则配置有问题,截图里分片上传是以PUT的提交方式,赶紧去看了一下配置规则,果然前人只配置的是GET、POST。(PS:由于我接手改造,故能不动原先设置就尽量不动,先从代码找问题)。最后改了阿里云跨域配置规则后,这个问题得到解决。

补一下,跨域配置:
①控制台输入oss,进入oss控制台;
②打开bucket列表,点击任意一个bucket;
③点击数据安全——>跨域设置;
④添加跨域规则:

over~

4.报错:Multipart upload ‘xxx’ failed === ConnectionTimeoutError: Connect timeout for 60000ms


文档有说:

在使用MultipartUpload接口时,如果遇到ConnectionTimeoutError超时问题,业务方需自行处理超时逻辑。例如通过缩小分片大小、增加超时时间、重试请求或者捕获ConnectionTimeoutError错误等方法处理超时。更多信息,请参见网络错误处理。

这个问题,我这里解决办法就是,设置分片为100MB,以及设置超时时间:

const options = {// 获取分片上传进度、断点和返回值。progress: (p, cpt, res) => {console.log(p);},// 设置并发上传的分片数量。parallel: 4,// 设置分片大小。默认值为1 MB,最小值为100 KB。partSize: 1024 * 1024 * 100,headers,// 自定义元数据,通过HeadObject接口可以获取Object的元数据。//meta: { year: 2020, people: "test" },mime: "text/plain",timeout: 120000  // 设置超时时间
};

5. 报错:Error: Please set the etag of expose-headers in OSS

截图:

那么根据提示,去查看这个帮助文档:https://help.aliyun.com/document_detail/32069.html
然后在前提条件,点击安装
注意这里:

这里:

ETag
x-oss-request-id
x-oss-version-id

6. 报错:OperationNotSupportedError: This operation don’t support x-oss-storage-class.

截图如下:

去查了 http错误码及oss错误排查,没发现有对这个错误的介绍。只是发现在设置headers时,有这一项的设置,我只好注释掉。
原headers:(根据官方文档示例写的)

const headers = {// 指定该Object被下载时的网页缓存行为。"Cache-Control": "no-cache",// 指定该Object被下载时的名称。//"Content-Disposition": "example.txt",// 指定该Object被下载时的内容编码格式。"Content-Encoding": "utf-8",// 指定过期时间,单位为毫秒。//Expires: "1000","Access-Control-Allow-Origin": "*",// 指定Object的存储类型。//"x-oss-storage-class": "Standard",// 指定Object标签,可同时设置多个标签。"x-oss-tagging": "Tag1=1&Tag2=2",// 指定初始化分片上传时是否覆盖同名Object。此处设置为true,表示禁止覆盖同名Object。"x-oss-forbid-overwrite": "true","Content-Type": 'application/x-www-form-urlencoded'
};

感觉注释掉并不是好的解决办法,虽然不再报这个错误,哈哈。

关于oss使用sts 后台签发临时token前端直传大文件的错误记录相关推荐

  1. c#mvc上传文件保存到后台_C# MVC实现前端上传文件保存到服务器

    后台代码 public string UploadECCInvoice_Intranet() { //返回前端结果状态对象 StateClass sc = new StateClass(); int ...

  2. 阿里云OSS开启Sts临时访问控制

    阿里云OSS开启Sts临时访问控制 第一步.信息整理汇总 下面是整个过程中需要记录的数据,以及位置 其中AccessKey需要创建成功后,及时的记录,因为后续只会展示一个AccessKeyId,另外一 ...

  3. 关于阿里云OSS资源STS访问控制

    目前还在看 什么是STS AssumeRole RAM角色和STS Token常见问题 RAM Policy常见示例 使用TST临时访问凭证访问OSS 大佬的博文1 大佬的博文2 做一下记录,稍后来补 ...

  4. 完整记录一下Web前端直传阿里OSS大文件+采用后端临时授权传stsToken的方式

    文章目录 前言(可不看) 1. 简介 2. 必要了解项 2.1 资源术语 2.2 常用SDK 3. 准备工作 3.1 创建bucket 3.2 设置跨域规则 3.3 创建RAM子账户及配置权限 3.4 ...

  5. AWS亚马逊实战-(移动端直传S3)服务器端调用AWS STS生成用户临时凭证上传至S3

    最终效果: 为每个用户生成一个临时的凭证,返回给移动端,移动端通过临时凭证,直传至S3.并且限制用户只能在自己的用户id目录下操作. 权限配置 新建用户 1.进入Identity and Access ...

  6. 若依-vue图片上传本地改OSS前台以及后台-附带oss图片上传工具类

    阿丹: 在二次开发若依的过程中发现若依的图片上传的默认的是在本地,在spring-vue版本中,如果要将平台上线那么就需要考虑这个问题,要使用fastdfs或者oss来完成代替本地的图片上传. 本篇文 ...

  7. 一文让你彻底会用对象存储OSS的前端直传,不懂就再看一遍(bushi)

    原由 在项目里有时候会碰到比如上传文件相关的,一般都是后端提供个接口,然后我们上传的时候后端再传到阿里OSS或者其他服务商的对象存储,然后把最终的url拿到存起来或者返回给前端,这种方式其实在上传图片 ...

  8. thinkphp6+webuploader实现大文件(视频)分片上传/本地保存或上传OSS

    thinkPHP6+webuploader分片上传大视频的解决方案: ①能解决视频太大,1G.2G直传服务器压力过大 ②部分追求完美的人不发接受直传,那只能分片上传 ③分片上传是我找到的比较合理的解决 ...

  9. VUE+OSS安全令牌实现图片前端直传

    图片上传说明: 传统文件上传方式 fastdfs:分布式文件系统需要docker安装配置 适合大容量存储 云上传(3种):对象存储:适用于文件.图片.视频等比较灵活具有高度可扩展性,元数据特性 文件存 ...

最新文章

  1. 父子表关联在窗体中的绑定显示和浏览
  2. DevExpress v17.2新版亮点—WPF篇(四)
  3. 我可以直接从GitHub运行HTML文件,而不仅仅是查看它们的来源吗?
  4. C++trie类的实现(附完整源码)
  5. 小猿圈之java文件重命名
  6. 后端服务接口都在测试什么?怎么测?
  7. httpd linux启动脚本,Linux下一个智能重启Apache服务器的脚本分享
  8. python中pygame学习——碰碰球(简单版)
  9. CSR8615 蓝牙4.0音响模块
  10. android通知栏的点击事件,Android监听消息通知栏点击事件
  11. [汇编]怎样让猫吃辣椒
  12. 读《学会提问——批判性思维指南》
  13. matlab中画网格,matlab怎么画网格
  14. uva1471 Defense Lines
  15. 传奇一键端服务器维护,烈焰炫彩传奇最终版一键服务端+启动教程+GM工具
  16. House Robber的解法
  17. 论文编辑与投稿——引用文献(References)中作者名字中“姓”、“名”应该如何组织
  18. 如何在Texpad中使用SJTUThesis模版
  19. Sikuli内导入其他sikuli脚本的几个方法
  20. dropzone 分段上传 进度条后退问题解决

热门文章

  1. 爬虫爬取京东商品详细数据 (品牌、售价、各类评论量(精确数量)、热评词及数量等)json解析部分数据
  2. 江苏大学2006年程序设计压轴题 编程打印如下图形,中间一行英文字母由输入得到,图形随输入英文字母的变化而变化。例如,输入英文字母A得到的图形为:A
  3. 梦幻蔬菜棚 用蔬菜来演奏 一场酷炫的交响乐
  4. 蓝桥秘密冲刺计划(9.17)组队
  5. 舆情监控有哪些分类?
  6. madVR+potplay 基本设置
  7. 中了这些没有恶意的勒索病毒,还有些小激动
  8. 福布斯美国十大最创新公司榜 全球榜百度第五
  9. C语言 三子棋小游戏
  10. ABAP-小工具之Program的导出与导入