Android oss policy上传

OSS Policy方式上传

    • 一、 流程对比
      • 1.1 普通上传
      • 1.2 服务端签名后直传
    • 二、获取上传的policy签名配置
    • 三、请求OSS上传文件
    • 四、调用应用服务器接口同步文件
    • 五、关于上传OSS报错注意事项
    • 六、附送链接

一、 流程对比

1.1 普通上传

在这里插入图片描述
缺点:

  • 上传慢:用户数据需先上传到应用服务器,之后再上传到OSS。网络传输时间比直传到OSS多一倍。如果用户数据不通过应用服务器中转,而是直传到OSS,速度将大大提升。
  • 扩展性差:如果后续用户多了,应用服务器会成为瓶颈。
  • 费用高:需要准备多台应用服务器。由于OSS上传流量是免费的,如果数据直传到OSS,不通过应用服务器,那么将能省下几台应用服务器。

1.2 服务端签名后直传

在这里插入图片描述

好处:

  • Web端向服务端请求签名,然后直接上传,不会对服务端产生压力,而且安全可靠。
  • 但服务端无法实时了解用户上传了多少文件,上传了什么文件。如果想实时了解用户上传了什么文件,可以采用服务端签名直传并设置上传回调。
  • 但存在着恶意上传的风险,造成存储空间的浪费

二、获取上传的policy签名配置

根据你们后端提供的get或者post API 请求获取policy直传的签名
接口一般定义为get请求 :/api/Upload/getSignedUrl
后端返回信息:

{
"accessid":"LTAI5tBDFVar1hoq****",
"host":"http://post-test.oss-cn-hangzhou.aliyuncs.com",
"policy":"eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wNVQyMDoyMzoyM1oiLCJjxb25kaXRpb25zIjpbWyJjcb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDAwXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsInVzZXItZGlyXC8i****",
"signature":"VsxOcOudx******z93CLaXPz+4s=",
"expire":1446727949,
"dir":"user-dirs/"
}
字段描述
accessid用户请求的AccessKey ID。
host用户发送上传请求的域名。
policy用户表单上传的策略(Policy),Policy为经过Base64编码过的字符串。详情请参见Post Policy。
signature对Policy签名后的字符串。详情请参见Post Signature。
expire由服务器端指定的Policy过期时间,格式为Unix时间戳(自UTC时间1970年01月01号开始的秒数)。
dir限制上传的文件前缀。

注意:dir是你要上传到oss bucket下的子目录名称,也就是你要上传的文件在哪个目录下,这个目录可以自己指定,如果这样,就可以客户端get请求的时候携带给后端,这时,API就可以按照个人需求来修改了
get请求可以在url上携带dir名称,也可以用post请求,body的形式传递json给后端,更容易参数扩展

dir目录很重要,在下面的第三点的post请求上传oss的时候,需要传递一个键值对:
“key” : value(dir+文件名)

三、请求OSS上传文件

用户使用Post方法向OSS发送文件上传请求
把上一步请求后端返回给你的那些参数,通过post请求构造body,上传至oss服务器
请求的地址就是服务端返回的host字段:http://post-test.oss-cn-hangzhou.aliyuncs.com
参数就是下面的伪代码:

new_multipart_params = {// key表示上传到Bucket内的Object的完整路径,例如exampledir/exampleobject.txtObject,完整路径中不能包含Bucket名称。// filename表示待上传的本地文件名称。'key' : key + '${filename}','policy': policyBase64,'OSSAccessKeyId': accessid,// 设置服务端返回状态码为200,不设置则默认返回状态码204。'success_action_status' : '200',    'signature': signature,};

注意:这里每一个参数都不能少,success_action_status不传也行,但是OSS默认会返回204状态码,指定200以后,会返回200

这里通过apiPost进行上传测试:
在这里插入图片描述
红框内是必传字段,我通过测试得出两个结论:
1.policy签名直传方式中,这个key一定要传递,指定好上面说的那个dir名称,否则会报错,类似policy策略失败问题
2.这种方式不会像我们正常post请求后端那样支持批量上传文件了,因为有key的限制
我尝试了多个file配置多个key,以失败告终

四、调用应用服务器接口同步文件

我们上传到OSS的文件,没设置callback的话,后端并不知道,有两种方法可以同步后端;
方案一:在请求OSS的时候,设置callback,估计oss上传完成会通知后端?
方案二:也是我现在项目做的方式,我们拿到OSS返回200以后,跟后端重新定义接口同步文件信息到后端

五、关于上传OSS报错注意事项

上传报错(返回400,403,405,204)

报错信息解决方案
204在formData: {}中添加 success_action_status:“200”
400添加上传的 Key 值,路径也要写正确,/images/test.png 为错误写法(最前面多了个斜杠),正确写法success images/test.png ;另外,阿里云OSS一次只允许上传一张照片。
403检测 OSSAccessKeyId,policy,signature 是否填写正确; expiration已过期
405URL中添加服务器地址 http://post-test.oss-cn-hangzhou.aliyuncs.com 而不能写成 http://post-test.oss-cn-hangzhou.aliyuncs.com/images/test.png这种形式

六、附送链接

阿里云服务端签名直传文档
https://help.aliyun.com/document_detail/31926.html?spm=a2c4g.31920.0.0

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

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

相关文章

CVPR 2023 | 掩码图像建模MIM的理解、局限与扩展

编者按:掩码图像建模(Masked Image Modeling, MIM)的提出,为计算机视觉模型训练引入无监督学习做出了重要贡献。得益于 MIM 的预训练算法,计算机视觉领域在近年来持续输出着优质的研究成果。然而整个业界对 MIM 机制的…

【网络安全带你练爬虫-100练】第5练:爬虫的翻页操作+错误情况过滤

目录 一、翻页分析: 二、代码逻辑 1、入口程序修改 2、page参数传入 三、完整代码 1、运行结果 2、错误分析: 3、缺陷代码: 4、完善逻辑: 5、完善代码: (说在前面,任何逻辑都有很多方…

短视频抖音账号矩阵系统源码---功能架构示例1

一、短视频账号矩阵系统源码开发服务器集群化处理开发成本更低(前提) 什么是集群化处理视频内存内耗?集群化处理视频内存内耗是指通过建立集群系统,将视频处理任务分配给多个计算节点进行并行处理,以减少单个计算节点…

大数据开发环境-Hbase

1.启动之前需要确保hadoop启动 # 查看 Hadoop 是否已经正常启动 : start-all.sh jps 2.启动Hbase

【运维工程师学习三】Linux中Shell脚本编写

【运维工程师学习三】shell编程 Shell程序分类1、系统中sh命令是bash的软链接2、Shell脚本标准格式之文件后缀3、Shell脚本标准格式之文件内容首行4、Shell脚本的运行方法一、作为可执行程序解释 二、作为解释器(bash)参数 5、find、grep、xargs、sort、…

Python学习笔记(十八)————python包相关

目录 (1)python包作用 (2)自定义python包 (3)导入自定义包 方式一: 方式二: (4)导入第三方包 ①pip安装 ②PyCharm安装 (1)pytho…

抖音seo矩阵系统源代码分享--开发者

一、技术开发注意事项: 目录 一、技术开发注意事项: 二、抖音SEO账号矩阵系统源码思路 三、抖音SEO底层开发逻辑主要包括以下几个方面: 四、 功能规划 五、 代码开发展示 确定业务需求:在开发前,需要明确抖音矩阵…

ChatGPT落地场景探索-数据库与大模型

目录 openGauss介绍 openGauss介绍 数据库与大模型 openGauss介绍 大模型与数据库 大模型为数据库带来的机遇 大模型解决数据库问题的挑战 数据库为大模型带来的价值 大模型大模型的发展趋势 趋势产品:Chat2DB 简介 特性 生产应用:基…

为什么需要多语言并行机器翻译?

随着全球化的加速和不同语言之间的交流需求不断增长,多语言机器翻译(Multilingual Parallel Machine Translation)成为一个备受关注的领域。传统上,机器翻译系统主要集中于一对特定语言之间的翻译,但这种单一语言对的模…

MySQL索引介绍及底层数据结构B+树介绍

索引 1. 索引概述1.1 索引1.2 索引的优缺点1.2.1 优点1.2.2 缺点 2. InnoDB中的索引2.1 主键索引设计方案2.2 索引底层数据结构2.3 常见索引2.3.1 聚簇索引2.3.1.1 优点2.3.1.2 缺点 2.3.2 非聚簇索引2.3.3 联合索引 3. MyISAM中的索引3.1 MyISAM 与 InnoDB对比 1. 索引概述 1…

代码随想录算法训练营第十一天 | 二叉树系列2

二叉树系列2 101 对称二叉树二叉树很重要的一点:确定遍历顺序关于递归代码随想录的代码我的代码(理解后编写) 100 相同的树我的代码 572 另一个树的子树我的代码录友的代码,只用递归!!! 104 二叉树的最大深度重点代码随…

17.OpenCV中的GFTTDetector类

文章目录 GFTTDetector功能OpenCV中GFTTDetector类reference 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 这是使用imgproc.hpp中的goodFeaturesToTrack函数封装的类,其使用和goodFeaturesToTrack函数基本相似。 GFTTDetec…