Skip to content

前端文件直传阿里 OSS

基于阿里云的oss和 naive 的 upload 组件的二次封装,在前端直接把文件上传到 oss 上再进行管理,不必把文件传到后台再传到 oss 上。比较适合于中小企业。

INFO

无需引入,可直接使用

WARNING

目前做了阿里的 sts 支持,这个组件需要配合后台 sts 接口才能使用

Design

  • 目前设计的是接口返回 accessKeyId、accessKeySecret、stsToken、region 和 bucket,然后实例化 oss。同时 sts 的刷新时间为 5 分钟,5 分钟后会重新调用接口返回新的 stsToken。

  • 目前设计的是 oss client 的单例模式,但是感觉,不太行,后需要改。原因是组件在不同的地方可能需要将文件传到不同的 region 和 bucket,同时还有个 folder 的概念。从后台返回 region 和 bucket 或许不是一个好选择,同时这也意味着单例好像也不太行。

  • 目前设计的是只把最后一层的值(即传的附件名)作为 v-model 的值,这个有利有弊。利是如果 oss 上的文件要做迁移,只需要修改拼接完整 url 的函数即可,不需要修改那些入库了的 url 数据;坏处是这样的值不够直观明确,无法确定文件是在哪个 region 哪个 bucket 哪个 folder 里,只能通过函数拼接才能看到完整的 url。

  • 做了大文件的断点续传(通过 oss 的 api),实际使用中可能会有问题

Usage

这个东西,有很强的可扩展性,可能每个人每个项目需求不一样,需要很多自定义的修改和配置。

这就意味着,这个东西的封装可能会带来很多 BUG,因为我还把这个组件放到实际业务开发中,所以目前的版本完全是我头脑风暴做出来的,许多细节的地方,到实际开发时可能会有问题。我会逐步优化的。

vue
<template>
  <w-OSS-upload v-model:value="fileList" />
</template>

Props

名称类型默认值说明
valuestring[]-双向绑定的值
regionstring-oss 的 region
bucketstring-oss 的 bucket
folderstring-oss 的 folder,这个是可自定义的
imagebooleanfalse是否为图片上传
disabledbooleanfalse禁用
maxnumber10最高可传文件数
acceptstring-文件格式
sizenumber1024*10单个文件最大大小,单位 kb
crossoverSizenumber1024*30采用大文件断点续传 api 的 borderline,单位 kb,默认大于 30M 就启用

Type

暂无

Form Usage

后续要加到表单里的,因为使用最多的场景,也就是表单了。

TODO

  • oss 实例:是一个组件一个实例,还是单例模式
  • 配置:关于 region、bucket 和 folder,是统一后台配置然后接口返回,还是在前端写死在 prop 中

Released under the MIT License.