Skip to content

大文件上传

1 实现思路

  • 前端上传大文件时使用 Blob.prototype.slice 将文件切片,并发上传多个切片,最后发送一个合并的请求通知服务端合并切片
  • 服务端接收切片并存储,收到合并请求后使用流将切片合并到最终文件
  • 前端使用Web Worker来进行高耗时任务。如果让浏览器中JS有大量计算时,会造成 UI 阻塞,出现界面卡顿、掉帧等情况,严重时还会出现页面卡死等情况(其实很容易触发,例如让你计算十万条数据)。
  • 原生 XMLHttpRequest 的 upload.onprogress 对切片上传进度的监听
  • 使用 Vue 计算属性根据每个切片的进度算出整个文件的上传进度

2 断点续传、秒传

  • 使用 spark-md5 根据文件内容算出文件 hash
  • 通过 hash 可以判断服务端是否已经上传该文件,从而直接提示用户上传成功(秒传)
  • 通过 XMLHttpRequest 的 abort 方法暂停切片的上传
  • 上传前服务端返回已经上传的切片名,前端跳过这些切片的上传

3 OSS对象存储服务

定义

首先OSS的英文全称是Object Storage Service, 直译过来就是”对象存储服务“。 严谨的解释是:OSS是一种使用HTTP API存储和检索非结构化数据和元素的数据对象的工具。 要点:

  1. HTTP API风格
  2. 存储数据
  3. 检索数据

通俗易懂的说就是:OSS就是通过HTTP restful风格的API进行数据上传,存储和获取的云端数据库服务。你也可以简单的理解成网盘。

服务供应商: 阿里云,蓝队云,移动云,AWS存储

OSS的相关术语

1. Object 对象

Object是OSS服务存储的基本单元。我们也可以称之为OSS的文件。Object通常由Object Meta(对象元信息,描述信息),Data(数据),和Key(文件名/文件标识)组成。Key是存储空间中的唯一标识,类似于数据库中的Primary key。

2. Bucket 存储空间

Bucket是用户用于存储对象的容器,所有的对象都必须隶属于某个存储空间。

3. Region 地域

Region表示OSS的数据中心所在的物理位置。地域选项是由供应商提供的,用户通常可以通过不同资费和需求来选择适合自己的地域服务。

4. Endpoint 访问域名

Endpoint表示OSS对外服务的访问域名(你的网盘地址)。OSS对外的API是符合RESTful请求风格的。另外不同Region下Endpoint会有所不同。具体的Endpoint要看服务供应商的提供。

5. AccessKey 访问秘钥 (AK)

AccessKey简称AK,用于访问资源时验证身份。AccessKey通常包括 AccessId 和 AccessKeySecret。OSS通过使用用AccessKey和AccessKeySecret对称加密的方式来校验身份。 AccessId是用户的标识,AccessKeySecret是用于加密的签名,可以理解为私钥。所以AccessKeySecret必须保密处理。

OSS的优点

  1. HTTP RESTful 规范的交互,简单明了,并且具有多平台和系统的通用性。
  2. 合理的资源分配,对于静态资源的处理使用OSS可以降低个人服务的资源压力
  3. 集成CDN,对资源进行缓存处理,提升资源访问速度
  4. 资源版本控制,方便资源在意外覆盖时恢复。
  5. 灵活的扩展性,想要更多的服务,给更多的钱。
  6. 对静态资源进行进一步的封装,降低了系统本身体系结构的复杂度,符合分布式服务的设计理念。

OSS的缺点

  1. 无法像传统数据库一样维护数据库结构。
  2. 存储对象不允许进行片的更改,只能修改整个对象,会有性能问题