Fusion Upload组件 对接 阿里云OSS/七牛/又拍
BeforeUpload 方法
Upload组件的BeforeUpload方法,是一个十分强大的方法,可以在上传请求发起之前做一系列的操作行为。从而达到改变请求参数的目的。
beforeUpload 的 Function Signature (实在不知道怎么翻译了) 为 Function(file: Object, options: Object) => Boolean/Object/Promise
。 说明这个方法接收两个参数
file
,即将上传的原生File对象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主要分为三个步骤:
- 获取文件信息
- 请求上传参数
- 上传文件
这样就又要用到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/七牛/又拍相关推荐
- 【解决方案】EasyCVR对接阿里云OSS助力泰国连锁超市老旧设备录像上云及云端实时监控
一.背景技术 目前数字视频监控系统已经被企业与家庭用户广泛使用,在维护治安和财产安全等方面作用巨大,而其中视频监控数据的录像存储与回放是核心功能和用途.市场上主流的视频监控录像数据的存储方法主要有两种 ...
- 第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 ...
- 云存储:阿里云 和 七牛 的比较
结论: 阿里云存储 七牛云存储 标准:REST.HTTP 99%符合 50% 基本功能:送二级域名.绑定域名.CDN 支持 支持 自定义文件HTTP header 支持 少量支持 高级服务:图片处理 ...
- 微信小程序对接阿里云OSS
开通oss服务和创建oss存储空间就不说了,下面直接进入主题 进入oss控制台,选择已经创建好的存储空间,选择基础设置里面的"跨域设置",之后点击创建规则, 按照图上面配置就行 去 ...
- 海量数据大课学习笔记(12)-账号微服务-阿里云OSS接入实战-小滴课堂
文章目录 前言 第1集 分布式文件存储业界常见解决方案介绍 第2集 阿里云OSS分布式对象存储介绍开通 第3集 权限知识 RBAC-ACL模式应用之阿里云RAM访问控制 第4集 阿里云OSS客户端SD ...
- 第三方存储系统(一):阿里云OSS云存储配置及Java上传接口设计
第三方存储系统(一):阿里云OSS云存储配置及Java上传接口设计 项目开发中,为了实现静态资源分离,提高系统运行的速率和稳定性,我们会把资源文件剥离出项目系统.而搭建文件存储系统就成为了不可或缺的工 ...
- 微信小程序直接上传文件到阿里云OSS组件封装
微信小程序直接上传文件到OSS 1. 封装公共方法 在根目录utils目录新建一个upload文件夹: // utils/upload/base64.jsvar base64EncodeChars = ...
- tp6.1 第三方filesystem扩展支持阿里云OSS和七牛和腾讯云COS)使用教程
一.安装 1.1 TP6.0时安装的,现在升级到TP6.1.2版本了,这个插件没有更新,换其它插件(不推荐,停用) 官网:thinkphp-filesystem-cloud: thinkphp6.0的 ...
- Springboot文件上传(本地上传、阿里云oss、腾讯云、华为云、Minio上传、七牛云)
文件上传: 本地上传.阿里云oss.腾讯云.华为云.Minio上传.七牛云. <!-- 阿里云存储 --><dependency><groupId>com.aliy ...
最新文章
- 北京高性能计算机应用中心,中国气象局高性能计算机系统资源使用报告-北京高性能计算机应用中心.PDF...
- hdu 5037 周期优化
- 树莓派外设开发基础(wiringPi库)
- u盘弹出工具_双佳数码 | 电脑u盘无法弹出怎么办?
- ext2删除文件恢复笔记
- python基础教程是什么-python基础教程之python是什么?
- Matlab之字符串的查找(findstr)与替换(strrep)
- xp共享文件win7访问时不能保存密码
- 自然语言处理 4.语义分析
- 字节序Endian与字节序标记BOM详解
- Python——IDLE是什么意思?
- java两周考核期被辞退_试用期被辞退,会影响一整年,或整个职场生涯
- 基于Gin+Vue+ElementUI实现的OA办公系统
- 3DMAX解析愤怒的小鸟
- 大数据报告|70%的中国人过劳死危险,其中有你吗?
- 祛百病祖传秘法转抄的
- ERTEC200P-2 PROFINET设备完全开发手册(8-1)
- VirtualBox网络之仅主机(Host-Only)网络
- 魔趣吧致力于为中文站长提供助力
- windows使用es的客户端es-head