BeforeUpload 方法

Upload组件的BeforeUpload方法,是一个十分强大的方法,可以在上传请求发起之前做一系列的操作行为。从而达到改变请求参数的目的。

beforeUpload 的 Function Signature (实在不知道怎么翻译了) 为 Function(file: Object, options: Object) => Boolean/Object/Promise。 说明这个方法接收两个参数

  1. file,即将上传的原生File对象
  2. options,上传的各个参数, 包括
{action: "http://xxxxx.xxxx"data: {}headers: {}method: "post"name: "file"timeout: undefinedwithCredentials: true
}
复制代码

返回值也支持多种(Boolean/Object/Promise):

返回值 行为
false 阻止上传
true 继续上传
Object 结构同入参 options 继续上传并且把 返回值 merge到 上传参数中
Promise.reject() 阻断上传
Promise.resolve(false) 阻断上传
Promise.resolve(true) 继续上传
Promise.resolve(data) 结构同入参 options 继续上传并且把 Promise返回值 merge到上传参数中

看起来挺复杂,但是其实内在逻辑就是一个: 返回false就阻止上传, 返回Object都merge上传参数,其他返回值直接继续上传。返回既可以是直接return,也可以是通过Promise返回值。

有了beforeUpload的能力,就可以用来做很多事情了。

formatter方法

Upload对返回值是有要求的。 只有HTTP状态码为2xx,且返回体为

{"success": true, //必需"message": "上传成功",  // (非必须)"url": "https://img.alicdn.com/tps/TB19O79MVXXXXcZXVXXXXXXXXXX-1024-1024.jpg"             // 返回结果"imgURL": "https://img.alicdn.com/tps/TB19O79MVXXXXcZXVXXXXXXXXXX-1024-1024.jpg",         // 图片预览地址 (非必须)"downloadURL": "https://img.alicdn.com/tps/TB19O79MVXXXXcZXVXXXXXXXXXX-1024-1024.jpg",    // 文件下载地址 (非必须)
}
复制代码

则代表成功。

由于各大云厂商,对于成功请求成功的定义是不一样的。所以需要用到Upload组件Upload组件的formatter方法。formatter接收原始的 response,用户自行把原始response转化为Uplaod要求的标准response并返回即可。

阿里云OSS

OSS 是阿里云提供的文件存储服务, 在集团内也是十分常用的一个存储服务。 目前阿里云推荐的方式是,Web端签名直传OSS。

首先看看文档样例,对接OSS主要分为三个步骤:

  1. 获取文件信息
  2. 请求上传参数
  3. 上传文件

这样就又要用到beforeUpload方法了,三个步骤都可以在beforeUpload中完成。假设我们的后端实现和官方Demo一致。官方样例的上传参数返回是这样的:

{"accessid": "xxxxxxx","host": "http://post-test.oss-cn-hangzhou.aliyuncs.com","policy": "xxxxxxxxxxxxxxxx","signature": "xxxxxxxxxxxxx","expire": 1546944707,"dir": "xxx/xxxx/xx/xx"
}
复制代码

前端通过ajaxGetOSSToken函数上面这个数据,那么beforeUpload就可以这样写:

function beforeUpload(file, uploadOptions) {// file 原生的File对象,即将被上传的文件// uploadOptions 是 上传参数let promise = ajaxGetOSSToken(); // 函数自行实现,保证返回一个promise来就可以promise = promise.then((data) => {uploadOptions.data = {name: file.filename,key: `${data.dir}${file.name}`,policy: data.policy,OSSAccessKeyId: data.accessid,success_action_status: 200signature: data.signature};uploadOptions.headers = {'X-Requested-With': null};// 需要跨域上传的话加这一段uploadOptions.action = data.host;return uploadOptions;});return promise;
}
复制代码
 <Uploadaction="" // 先不填 有服务端返回beforeUpload={beforeUpload}onChange={onChange}onSuccess={onSuccess}withCredentials={false} // 这个很重要><Button>Upload File</Button></Upload>
复制代码

可以上传文件到OSS的Upload组件就完成了。

七牛云存储

七牛提供了Form上传接口与后端生成Token的Java SDK NodeJS SDK。 假设后端返回的数据是这样的:

{"token": "xxxxxxx","key": "xxx/yyyy/zzz/aaa.jpg","host": "http://upload.qiniup.com/"
}
复制代码

前端通过ajaxGetOSSToken函数上面这个数据,那么beforeUpload就可以这样写:

function beforeUpload(file, uploadOptions) {// file 原生的File对象,即将被上传的文件// uploadOptions 是 上传参数let promise = ajaxGetOSSToken(); // 函数自行实现,保证返回一个promise来就可以promise = promise.then((data) => {uploadOptions.data = {token: data.token,key: data.key,};uploadOptions.headers = {'X-Requested-With': null};// 需要跨域上传的话加这一段uploadOptions.action = data.host;return uploadOptions;});return promise;
}
复制代码
 <Uploadaction="" // 先不填 有服务端返回beforeUpload={beforeUpload}onChange={onChange}onSuccess={onSuccess}withCredentials={false} // 这个很重要><Button>Upload File</Button></Upload>
复制代码

可以上传文件到七牛的Upload组件就完成了。

又拍云

又拍云提供Form API,支持大文件和小文件上传,本处以小文件上传为例。也给后端生成Token的各种语言的SDK。 假设后端返回的数据是这样的:

{saveKey: "xxxxx",policy: "xxxxxx==",authorization: "xxxxxxxx",bucket: "xxxx",
}
复制代码

前端通过ajaxGetOSSToken函数上面这个数据,那么beforeUpload就可以这样写:

function beforeUpload(file, uploadOptions) {// file 原生的File对象,即将被上传的文件// uploadOptions 是 上传参数let promise = ajaxGetOSSToken(); // 函数自行实现,保证返回一个promise来就可以promise = promise.then((data) => {uploadOptions.data = {'save-key': data.saveKey,policy: data.policy,authorization: data.authorization,expiration: 30,};uploadOptions.headers = {'X-Requested-With': null};// 需要跨域上传的话加这一段uploadOptions.action = " http://v0.api.upyun.com/" + data.bucket;return uploadOptions;});return promise;
}
复制代码
 <Uploadaction="" // 先不填 有服务端返回beforeUpload={beforeUpload}onChange={onChange}onSuccess={onSuccess}withCredentials={false} // 这个很重要><Button>Upload File</Button></Upload>
复制代码

可以上传文件到又拍云的Upload组件就完成了。

转载于:https://juejin.im/post/5c9c3118e51d450eca1a40c0

Fusion Upload组件 对接 阿里云OSS/七牛/又拍相关推荐

  1. 【解决方案】EasyCVR对接阿里云OSS助力泰国连锁超市老旧设备录像上云及云端实时监控

    一.背景技术 目前数字视频监控系统已经被企业与家庭用户广泛使用,在维护治安和财产安全等方面作用巨大,而其中视频监控数据的录像存储与回放是核心功能和用途.市场上主流的视频监控录像数据的存储方法主要有两种 ...

  2. 第2-3-5章 删除附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

    文章目录 5.4 接口开发-根据id删除附件 5.4.1 接口文档 5.4.2 代码实现 5.4.3 接口测试 5.4.4 测试ALI和FAST_DFS以及MINIO上传和删除的接口 5.4.4.1 ...

  3. 云存储:阿里云 和 七牛 的比较

    结论: 阿里云存储 七牛云存储 标准:REST.HTTP 99%符合 50% 基本功能:送二级域名.绑定域名.CDN 支持 支持 自定义文件HTTP header 支持 少量支持 高级服务:图片处理 ...

  4. 微信小程序对接阿里云OSS

    开通oss服务和创建oss存储空间就不说了,下面直接进入主题 进入oss控制台,选择已经创建好的存储空间,选择基础设置里面的"跨域设置",之后点击创建规则, 按照图上面配置就行 去 ...

  5. 海量数据大课学习笔记(12)-账号微服务-阿里云OSS接入实战-小滴课堂

    文章目录 前言 第1集 分布式文件存储业界常见解决方案介绍 第2集 阿里云OSS分布式对象存储介绍开通 第3集 权限知识 RBAC-ACL模式应用之阿里云RAM访问控制 第4集 阿里云OSS客户端SD ...

  6. 第三方存储系统(一):阿里云OSS云存储配置及Java上传接口设计

    第三方存储系统(一):阿里云OSS云存储配置及Java上传接口设计 项目开发中,为了实现静态资源分离,提高系统运行的速率和稳定性,我们会把资源文件剥离出项目系统.而搭建文件存储系统就成为了不可或缺的工 ...

  7. 微信小程序直接上传文件到阿里云OSS组件封装

    微信小程序直接上传文件到OSS 1. 封装公共方法 在根目录utils目录新建一个upload文件夹: // utils/upload/base64.jsvar base64EncodeChars = ...

  8. tp6.1 第三方filesystem扩展支持阿里云OSS和七牛和腾讯云COS)使用教程

    一.安装 1.1 TP6.0时安装的,现在升级到TP6.1.2版本了,这个插件没有更新,换其它插件(不推荐,停用) 官网:thinkphp-filesystem-cloud: thinkphp6.0的 ...

  9. Springboot文件上传(本地上传、阿里云oss、腾讯云、华为云、Minio上传、七牛云)

    文件上传: 本地上传.阿里云oss.腾讯云.华为云.Minio上传.七牛云. <!-- 阿里云存储 --><dependency><groupId>com.aliy ...

最新文章

  1. 北京高性能计算机应用中心,中国气象局高性能计算机系统资源使用报告-北京高性能计算机应用中心.PDF...
  2. hdu 5037 周期优化
  3. 树莓派外设开发基础(wiringPi库)
  4. u盘弹出工具_双佳数码 | 电脑u盘无法弹出怎么办?
  5. ext2删除文件恢复笔记
  6. python基础教程是什么-python基础教程之python是什么?
  7. Matlab之字符串的查找(findstr)与替换(strrep)
  8. xp共享文件win7访问时不能保存密码
  9. 自然语言处理 4.语义分析
  10. 字节序Endian与字节序标记BOM详解
  11. Python——IDLE是什么意思?
  12. java两周考核期被辞退_试用期被辞退,会影响一整年,或整个职场生涯
  13. 基于Gin+Vue+ElementUI实现的OA办公系统
  14. 3DMAX解析愤怒的小鸟
  15. 大数据报告|70%的中国人过劳死危险,其中有你吗?
  16. 祛百病祖传秘法转抄的
  17. ERTEC200P-2 PROFINET设备完全开发手册(8-1)
  18. VirtualBox网络之仅主机(Host-Only)网络
  19. 魔趣吧致力于为中文站长提供助力
  20. windows使用es的客户端es-head

热门文章

  1. 如何方便快速在指定文件夹打开命令行
  2. Oracle在Linux上的预配置
  3. P2475 [SCOI2008]斜堆(递归模拟)
  4. Python爬虫基础:验证码的爬取和识别详解
  5. Swift @escaping @noescape
  6. 【转】PMO、EPG与QAG职责分工——任甲林
  7. 同源策略——浏览器安全卫士
  8. java i++与++i与与之间的区别在哪里
  9. MYSQL中的空格及大小写问题
  10. Spring从菜鸟到高手(一)实现AOP的基本原理