qiniu4js目前多是七牛JavaScript浏览器文件上传的最好实现。javascript
使用TypeScript编写,不依赖任何三方库,纯代码不包含任何界面元素,使用HTML5 文件API上传(目前和将来不会支持HTML4以及FLASH)。html
支持UMD模块导入。java
[x] 文件直传git
[x] 分块上传es6
[x] 多文件上传github
[x] token共享npm
[x] 自动重传浏览器
[x] 任务拦截器缓存
[x] 文件过滤安全
[x] 多实例(能够建立多个上传实例,互不影响)
[ ] 自定义变量
[ ] 图片裁剪
[ ] 图片质量压缩
[ ] 使用七牛API进行图片处理
sudo npm install qiniu4js --save
<script src="qiniu4js.js"></script>
import {UploaderBuilder} from 'Qiniu'
{UploaderBuilder} = require('Qiniu')
//构建uploader实例 let uploader = new Qiniu.UploaderBuilder() .debug(false)//开启debug,默认false .domain("http://img.yourdomain.com")//默认为http://upload.qiniu.com .retry(0)//设置重传次数,默认0,不重传 .size(1024*1024)//分片大小,最多为4MB,单位为字节,默认1MB .chunk(true)//是否分块上传,默认true,当chunk=true而且文件大于4MB才会进行分块上传 .auto(true)//选中文件后当即上传,默认true .multiple(true)//是否支持多文件选中,默认true .accept(['.gif','.png','video/*'])//过滤文件,默认无,详细配置见http://www.w3schools.com/tags/att_input_accept.asp .tokenShare(true)//在一次上传队列中,是否分享token,若是为false每上传一个文件都须要请求一次Token,默认true .tokenFunc(function (setToken,task) { //token获取函数,token获取完成后,必须调用`setToken(token);`否则上传任务不会执行。 setTimeout(function () { setToken("token"); }, 1000); }) //任务拦截器 .interceptor({ //拦截任务,返回true,任务将会从任务队列中剔除,不会被上传 onIntercept: function (task) { return task.file.size > 1024 * 1024; }, //中断任务,返回true,任务队列将会在这里中断,不会执行上传操做。 onInterrupt: function (task) { if (this.onIntercept(task)) { alert("请上传小于1m的文件"); return true; } else { return false; } }, } //你能够添加多个任务拦截器 .interceptor({...}) .listener({ onReady(tasks) { //选择上传文件肯定后,该生命周期函数会被回调。 },onStart(tasks){ //开始上传 },onTaskGetKey(task){ //为每个上传的文件指定key,若是不指定则由七牛服务器自行处理 return "test.png"; },onTaskProgress: function (task) { //每个任务的上传进度,经过`task.progress`获取 console.log(task.progress); },onTaskSuccess(task){ //一个任务上传成功后回调 },onTaskFail(task) { //一个任务在经历重传后依然失败后回调此函数 },onTaskRetry(task) { //开始重传 },onFinish(tasks){ //全部任务结束后回调,注意,结束不等于都成功,该函数会在全部HTTP上传请求响应后回调(包括重传请求)。 }} }).build(); //若是auto设置为false,则须要手动启动上传。 //uploader.start(); //因为安全缘由,display:none的file input,没法经过代码调用click方法,必须经过以下处理,让用户来实现click,从而打开文件选择窗口: //你能够自行监听HTML元素的click事件,在回调函数内部打开文件选择窗口。你也可使用jQuery监听,下面使用的是原生的JavaScript的方式。 button = document.getElementById('button'); button.addEventListener("click", function () { uploader.chooseFile(); }
0.0.9 (2016-10-21)
分块上传,自定义上传域名
0.0.8 (2016-10-19)
fix bug,当没有选中任何文件的时候,会触发上传函数。
0.0.7 (2016-10-19)
更换上传域名为upload.qiniu.com
0.0.6 (2016-10-19)
绕过缓存,避免每次都上传一样的文件。
0.0.5 (2016-10-19)
tokenFunc(setToken,task)增长task参数
0.0.4 (2016-10-19)
修复了一个关于accept选项的bug。
0.0.3 (2016-10-19)
任务拦截器实现。
0.0.2 (2016-10-19)
基本功能的实现。
知乎 : @面条
Github : @lsxiao
MIT