专栏名称: 亚马逊云科技
亚马逊AWS的公众号,第一时间获取关于AWS国内外服务的资讯。AWS中国(北京)区域由光环新网运营。
目录
相关文章推荐
中国国家地理  ·  斯里兰卡自然生态考察 | 活动报名 ·  20 小时前  
地理蹊  ·  塔克拉玛干沙漠,产珍珠了?! ·  6 天前  
中国国家地理  ·  彭州,到底有多“蔬式”? ·  4 天前  
YNTV2都市条形码  ·  明天记得加衣!云南这些地方将降温降雨 ·  5 天前  
51好读  ›  专栏  ›  亚马逊云科技

大咖专栏 | 客户端直连S3实现分片续传的思路与实践

亚马逊云科技  · 公众号  ·  · 2017-05-02 19:05

正文


大咖专栏

大咖专栏主要刊登亚马逊AWS诸位大咖亲自撰写的Blog,内容涉猎广泛,话题讨论前沿,且与实战紧密相连。我们非常欢迎小伙伴们在评论区留言,与大咖互动交流!


今天为大家撰文的大咖,是我们的AWS解决方案架构师——李磊老师。

李磊

AWS解决方案架构师

李磊,AWS解决方案架构师,负责基于AWS的云计算方案的架构设计,同时致力于AWS云服务在国内和全球的应用和推广。他在大规模并发后台架构、电商系统、社交网络平台、互联网领域应用、DevOps以及Serverless无服务器架构等领域有着广泛的设计与实践经验。在加入AWS之前他拥有超过十年的开发和架构设计经验,带领团队攻克各种技术挑战,总是希望站在技术的最前沿。

背景介绍

Amazon S3是互联网存储解决方案,能让所有开发人员访问同一个具备可扩展性、可靠性、安全性和快速价廉的数据存储基础设施。Amazon S3 提供了一个简单 Web 服务接口,可用于随时在互联网上的任何位置存储和检索任何数量的数据。开发人员可以利用Amazon提供的REST API接口、命令行接口或者支持不同语言的SDK访问S3服务。


同时,S3对于上传功能的API提供也是非常丰富的,并且很多客户对于S3的断点续传也有了很深入的需求,本篇博客将会介绍如何使用S3的Javascript SDK来实现客户端浏览器到S3的断点续传功能。

安全考量

首先我们需要度量在浏览器客户端直连上传到S3这个场景下的安全问题,我们是一定不能把我们的AccessKey暴露到客户端浏览器的,但是上传到S3的API一定要提供AccessKey和SecretKey,因此这里我们将会利用生成临时的AccessKey和SecretKey(结合有效期)的方式来保证客户端的上传,这里介绍一篇关于利用TVM (Token Vending Machine)来生成临时Key并上传S3的文章,本文主要探讨关于S3的分片上传和断点续传的知识点。


文章链接如下:

https://aws.amazon.com/cn/blogs/china/token-vending-machine/

Javascript SDK和S3 API简介

从整体编程语言架构的层面上来讲,AWS的各个语言的SDK都主要划分为上层和下层的API,上层API主要是针对一些用户必要的功能利用下层API所作的一层封装,掌握了这个原则之后我们就可以合理的利用AWS的上层API看能否实现自身的需求。

Javascript SDK文档总结

在掌握SDK之前,我们应该先对SDK的文档和大致的结构有一个了解,这样才能方便我们更好的使用SDK,下面列出了SDK的官网入门链接和API参考文档。


API参考文档: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/index.html


S3 API参考文档: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html

构建SDK中的S3对象

首先,AWS的SDK都是先需要利用Credentials来构建对象的,这里我们构建S3的对象也是如此,但是请注意一定不能将自己的Key暴露在客户端或者提交到代码中,应该使用 TVM获取了Key之后再利用AWS.Credentials对象来构建S3的对象。

var key = ""; // TVM的临时Token

var secret = ""; // TVM的临时Token


var s3 = new AWS.S3({accessKeyId: key, secretAccessKey: secret, region: "us-west-2"});

在构建S3对象时,也需要同时指定AWS的Region。

利用上层Javascript API

构建简单的分片断点续传功能

接下来,我们一步一步的来创建上层API构建断点续传的实践。

1.   创建工程

这里我们以node.js平台的express来提供简单的静态服务。本文不会涉及如何安装node.js,关于安装指南,可以参考官网nodejs.org 。首先,利用npm包管理器安装express模版生成器:

npm install express-generator -g

完成后我们利用命令行生成项目:

mkdir s3upload

express --view=ejs

这里的--view=ejs主要指定ejs作为express的html模版引擎,方便我们的测试。创建好之后的工程结构如下图:

在接下来的内容里,我们会介绍:

2. 编写页面UI

3. 分片上传控制

4. 启动项目

5. 设置CORS

6.  S3上层API说明

通过底层API来编写实现更多分片上传的功能

总结


请感兴趣的小伙伴点击“阅读原文

或扫描/长按识别下方的二维码

阅读完整版文章