OSS Web直传——使用Flash上传

本文涉及的产品
对象存储 OSS,20GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
日志服务 SLS,月写入数据量 50GB 1个月
简介:
+关注继续查看
OSS Web直传使用案例:点击这里


好的。今天我讲解一下Flash上传的示例。
 
Flash上传我还是采用pupload上传插件。做法是将 pupload 的runtimes 改成:flash
 
var uploader = new plupload.Uploader({
    browse_button : 'selectfiles',
    runtimes : 'flash',  //设成flash,就是flash的方式上传
    container: document.getElementById('container'),
    flash_swf_url : 'lib/plupload-2.1.2/js/Moxie.swf',
    silverlight_xap_url : 'lib/plupload-2.1.2/js/Moxie.xap',

 
Flash上传跟Html5 上传的区别与联系
 
两者采用上传的协议都是POST,  发送请求的内容格式是一样。唯一的区别在于对于跨域的设置,
Hmlt5是采用Cors的设置。 而Flash是采用获取crossdomain.xml的方式
 
 
Flash上传流程
即客户端flash上传时,会向上传的源站请求一个crossdomain.xml,flash通过crossdomain.xml的内容,判断本次上传是否符合规则。所以如果您的bucket想要支持flash上传,你的bucket必须有一个名字叫crossdomain.xml的object存在。
 
 
crossdomain.xml
crossdomain.xml的内容定义了对于上传的授权策略
具体细节可以参考:http://www.adobe.com/cn/devnet/adobe-media-server/articles/cross-domain-xml-for-streaming.html
这里我定义一个最简单的上传策略

<?xml version="1.0"?> 
<cross-domain-policy><site-control permitted-cross-domain-policies="master-only"/> 
<allow-access-from domain="*"/> 
</cross-domain-policy>


 将该crossdomain.xml保存到您要设置的bucket里面。
 
 
测试实例
通过该例子上传,可以选择多文件,上传有进度条。能上传大文件。
http://oss-demo.aliyuncs.com/oss-flash-upload-js-direct/index.html
 
 
实例分析
下面是对上传的协议抓包分析:

Flash上传时,第一次时会请求crossdomain.xml这个文件。然后再进行POST操作
 
其中请求crossdomain.xml的请求格式如下:

 
注意我框住的部分,请求是没有带任何签名的。
 
基于请求成功,OSS回复如下:

 
大家可能会有疑问,因为请求crossdomain.xml是没有带签名的,如果我的bucket是私有的,不带签名请求bucket里crossdomain.xml这个文件,肯定不成功,是不是意味着私有的bucket不支持flash上传。
这个答案当然是不管是私有的还是共有的bucket都是支持flash上传。

私有的bucket支持
上述问题的解决方法是通过Object Acl来实现。Object Acl可以参考文档:
 
ObjectAcl
ObjectAcl其实就是Object级别的权限管理。如我的bucket是私有的。但是我可以对于某一个文件设置一个其他权限。
在这里,我可以将crossdomain.xml这个object的object 权限设成公共读。即读这个私有bucket: post-test 里面的crossdomain.xml这个文件,不需要带签名也能读取。
 
如何设置object acl呢?
基于官方文档,我做了这样一个简单的demo 可以通过下面这个页面完成。
 http://oss-demo.aliyuncs.com/image/object-acl.html
 
 
设置的案例如下:

 
这个页面虽然填入你的id/key,但是往后端请求时,请求的签完名的串,所以后端没有办法知道你的id/key
所以你的id/key是安全,这个请放一百个心。

这个页面的原理是签名在前端js代码,因为有cors限制。js发送http request有限制。所以将js签名后的内容,发送到后端。由后端PHP程序,发送请求。并把结果返回。所以后端没有办法知道您所设置的id/key。 因为从签名后的内容是推算不出AccessId/AccessKey 。如上述图。
 
 
注意一点:因为本案例是签名在前端完成,有Accessid/AccessKey泄漏的风险。所以推荐签名在后端完成。可以参考例子:
 
 
http://oss-demo.aliyuncs.com/oss-flash-upload-js-php/index.html
 
 
代码下载:
签名在前端完成:点击下载
签名在PHP完成(推荐):点击下载
 
 
 
 
 
 
 
 
 
 
 
 

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
9天前
|
JavaScript 对象存储
wangEditor接入阿里云OSS
wangEditor接入阿里云OSS
13 0
|
9天前
|
存储 JavaScript 前端开发
html+vue组件实现阿里云OSS对接
html+vue组件实现阿里云OSS对接
40 0
|
14天前
|
NoSQL Java Nacos
前后端分离项目知识汇总(阿里云Oss,EasyExcel,视频点播,SpringCloud,Redis,Nuxt)-3
前后端分离项目知识汇总(阿里云Oss,EasyExcel,视频点播,SpringCloud,Redis,Nuxt)
24 0
|
10月前
|
JavaScript 前端开发 Java
Vue获取服务端签名web端直传OSS,各种报错The bucket POST must contain the specified ‘key‘.等解决办法
Vue获取服务端签名web端直传OSS,各种报错The bucket POST must contain the specified ‘key‘.等解决办法
990 0
Vue获取服务端签名web端直传OSS,各种报错The bucket POST must contain the specified ‘key‘.等解决办法
|
对象存储
oss 追加上传支持excel文件使用吗
oss 追加上传支持excel文件使用吗
|
存储 对象存储
oss区分存储怎么把图片压缩后再上传?
oss区分存储怎么把图片压缩后再上传?
765 0
|
对象存储 iOS开发
iOS开发:日志记录文件及压缩上传OSS
发现APP上传本地日志文件相当的好用,根据之前研究学习的对这一模块做了一些更具体的优化处理。从标题可以看出,实现这一功能分以下几个步骤: 1、日志记录本地文件 2、日志文件压缩[xx.zip] 3、压缩之后的文件上传 4、压缩文件删除
457 0
|
网络协议 Java Linux
OSS 上传出现异常
OSSBrower &quot;no space left on&quot; 分析: 有明显报错信息的先 Google 一下,看看是操作系统错误还是 OSSBrower 抛出,经过鉴定错误是 Linux 系统底层返回,说明当时系统的 OSSBrower 所在的目录磁盘满了,开源的错误到处可以看到,自行解决即可。
OSS 上传出现异常
|
Web App开发 JavaScript API
【OSS最佳实践】WEB站点中如何应用OSS产品
OSS提供了海量、安全、低成本、高可靠的云存储服务,用户可以通过SDK、API、OSS相关工具等在WEB端应用集成OSS。OSS的优势在于:OSS服务器性能较好,OSS单个bucket存储空间大小不限制,OSS单个bucket出入带宽限制5Gb以上(故大部分情况下,上传下载速度是取决于客户端的带宽)。
10939 0
|
Web App开发 前端开发 对象存储
OSS Web直传方案在iOS中上传视频时需要注意的一个小坑
OSS Web直传方案通过将OSS和简单易用的前端上传组件Plupload结合,为前端上传文件场景提供了一个广泛支持的解决方案。 和大家分享一个Plupload在iOS环境下一个小的兼容性问题的,希望能对遇到同样问题的同学有所帮助
3984 0
相关产品
对象存储
推荐文章
更多