Uploadify是一个基于JQuery的多文件上传JS组件,高度定制,两个版本可供选择。flash版本在最新的Safari等不再支持flash的浏览器或者一些手机浏览器中就无法正常的加载使用,因此推荐使用html5版本!

优点:

  • 支持多文件上传
  • 支持进度条显示
  • 支持拖拽上传
  • 支持文件格式检查及大小限制
  • 支持在文件上传的各个生命周期对文件进行处理

Uploadify两个版本一个为flash版(免费),一个为HTML5版(收费$5.00 USD,还有一个用户商业用途的就比较贵了)

基本使用:

环境要求: jQuery1.4或以上的版本;一个能解析php、asp.net等类似的服务器端脚本语言的服务器运行环境。

  1. 下载uploadifive压缩文件解压至你的项目目录
  2. 引入相关js、css文件:
    • <link rel="stylesheet" type="text/css" href="uploadifive.css">
    • <script src="/jquery.js" type="text/javascript"></script>
    • <script src="jquery.uploadifive.js" type="text/javascript"></script>
  3. 页面中添加type="file"的一个input,并且指定id

    <input id="file_upload" type="file" name="file_upload" />
  4. 初始化uploadfive,绑定到id为file_upload的input上
$(function() {
$('#file_upload').uploadifive({
//处理文件上传的服务器端脚本,可根据自己的项目环境修改
'uploadScript' : 'uploadifive.php'
// Put your options here
});
});

Options选项参数

对常用参数进行解释

  • auto:是否自动触发上传 ,如果选择false需要手动触发通过调用:

    $('#file_upload').uploadifive('upload')
  • buttonText:指定上传按钮文字
  • checkScript:指定检查文件名是否重复的服务器端脚本
  • dnd:是否允许拖动上传,如果为false则禁用拖动上传
  • fileObjName:服务器端获取的文件对象的名称,如php的 $_FILES['fileObjName']
  • fileSizeLimit:限制上传文件的大小【单位KB,MB,GB】
  • fileType:上传文件类型:如图片 image/*,如果指定了类型限制,点击上传弹出的资源选择器中,非限定的文件类型将无法不选择
  • formData:额外提交的表单数据可以在这个参数下指定{'someKey' : 'someValue'}
  • height|width:上传按钮的宽度与高度只能通过这两个属性进行修改
  • multi:是否多文件上传[true|false]

Events回调方法

  • onAddQueueItem:当文件添加至上传队列中时触发此回调方法
$(function() {
$('#file_upload').uploadifive({
'uploadScript' : '/uploadifive.php',
'onAddQueueItem' : function(file) {
alert('The file ' + file.name + ' was added to the queue!');
}
});
});
  • onCancle:当点击取消上传,从上传队列中移除文件对象时触发
$(function() {
$('#file_upload').uploadifive({
'uploadScript' : '/uploadifive.php',
'onCancel' : function() {
alert('The file ' + file.name + ' was cancelled!');
}
});
});
  • onUpload:当调用upload方法手动触发上传是触发一次
  • onUploadFile:在每个文件准备开始上传时触发一次【这个回调方法存在一个bug,见下文】
$(function() {
$('#file_upload').uploadifive({
'uploadScript' : '/uploadifive.php'
'onUploadFile' : function(file) {
alert('The file ' + file.name + ' is being uploaded.');
}
});
});
  • onProgress:文件上传过程中不断的触发,因此你可以在此回调方法中定制你的上传进度等信息
$(function() {
$('#file_upload').uploadifive({
'uploadScript' : '/uploadifive.php'
'onProgress' : function(file, e) {
if (e.lengthComputable) {
var percent = Math.round((e.loaded / e.total) * 100);
}
file.queueItem.find('.fileinfo').html(' - ' + percent + '%');
file.queueItem.find('.progress-bar').css('width', percent + '%');
}
});
});
  • onUploadComplete:文件上传完成时触发

    回调参数 file:上传完的文件对象;data:服务器端(uplodify.php)返回的信息
$(function() {
$('#file_upload').uploadifive({
'uploadScript' : '/uploadifive.php'
'onUploadComplete' : function(file, data) {
alert('The file ' + file.name + ' uploaded successfully.');
}
});
});
  • onFallback:初始化时检查浏览器是否支持HTML5
  • onError:在文件添加到上传队列或者在上传的过程中发生错误的回调函数

    errorType类型见官网文档

Methods直接调用的方法

  • debug:比较有用的debug方法,可以在控制台打印出上传的相关信息
<a href="javascript:$('#file_upload').uploadifive('debug')">Debug</a>

与七牛结合直接上传文件到七牛云存储

注:上传到七牛需要对几个参数进行修改

  1. 七牛可以接受的fileObjName的名称是file
  2. 表单数据中必须包含上传token[token有服务器端返回]
  3. 表单数据中指定上传的key,作为七牛空间中存储的文件名
  4. uploadScript指定为:http://up.qiniu.com/

以上2,3两项数据的传递需要修改formData选项,如果是单个文件上传,这样是没有问题的,如果是多文件上传的情况,第一个文件正常上传成功,当上传第二个时,up.qiniu.com就会返回一个错误状态码614,即文件已存在。

最初是想在onAddQueueItem回调函数中修改formData中token和key的值,但是并没有得到想要的结果。查看请求到七牛的header中的表单信息的key值是一样的,所以,在文件加入队列中时进行修改表单formData只能触发一次,从源码中可以看到确实如此。

继续查看文档找到onUploadFile是在每个文件上传前触发,于是修改代码,调试发现此回调函数并没有被触发,查看源码毫无此回调函数调用的踪迹,于是加入如下代码到jquery.uploadfive.js的$data.uploadFile 的函数里的填充form表单数据之前379行,如下所示:

// Create a new FormData object
var formData = new FormData();
// Add the form data
formData.append(settings.fileObjName, file);
//trigger onUploadFile fucntion 看这里看这里看这里!!!
if (typeof settings.onUploadFile === 'function') {
settings.onUploadFile.call($this, file);
}
// Add the rest of the formData
for (i in settings.formData) {
formData.append(i, settings.formData[i]);
}

至此,多文件上传七牛与uploadfive的结合完成!


参考文档:uploadify官网文档html5版本

Uploadifive 使用教程【结合七牛】的更多相关文章

  1. discuz接入七牛sdk

    自己摸索了几天,找群里面的人各种问,都没有一个人回答我,哎,国内的开源精神呢...... 需要修改有以下几个: 1.替换 /source/class/class_core.php 文件   解释:就 ...

  2. MWEB+七牛 上传图片

    MWEB+七牛 上传图片 博客之前的图片也都用的七牛,但编辑和上传分离还是很麻烦,所以一直很心水meb, 上周mweb降到¥50,感觉短期内应该不会再降了,于是果断入手,今天在和使用图床功能遇到了一些 ...

  3. UEditor上传图片到七牛C#(后端实现)

    由于个人网站空间存储有所以选择将图片统一存储到七牛上,理由很简单 1  免费10G 的容量  ,对个人网站足够用 2  规范的开发者文档 和完善的sdk(几乎所有热门语言sdk) 整体思路 图片上传七 ...

  4. php七牛批量删除空间内的所有文件方法

    相信大家都在使用七牛的免费云存储服务的同时,有清空七牛云存储镜像文件或者批量删除七牛云空间文件的需求,该怎么做?官方的工具好像并没有提供批量删除的功能,七牛云官方给出的建议是删除空间,再新建一个这样太 ...

  5. 码字工作者的发文姿势—— 用MWeb+Markdown Here+七牛 轻松实现多平台发布

    码字工作者的发文姿势—— 用MWeb+Markdown Here+七牛 轻松实现多平台发布   1.对于写作你最头疼什么 对于大多数码字工作者来说,随时随地记录灵感,构思文章,集中书写,其实是一件令人 ...

  6. 用WP Super Cache和七牛为你的WordPress网站加速

    众所周知,WordPress一直都是博客建站的首选程序,而现在也有越来越多的企业网站都选择采用WordPress来搭建. WordPress虽好但其过于臃肿且响应速度慢等缺点也为站长们所诟病,目前网上 ...

  7. 前端js调用七牛制作评价页面案例

    一.需求 公司所有的上传页面都用七牛,前端不免要直接调用七牛的代码进行上传,以下是一个实现七牛上传的案例,制作一个常见的商品评价页面,页面需求很常见当上传到第五章图片的时候,上传按钮消失,上传需要显示 ...

  8. 七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解

    [图片引用方向纠正]直接在图片后面添加 ?imageMogr/auto-orient eg:http://data.upfitapp.com/data/2016/10/18/1629114767606 ...

  9. 七牛整合php上传从微信下载接口下载下来的文件

    因为ios系统直接读取不了MP3格式的文件,所以从微信接口下载下来的MP3格式音频上传到七牛后要转码.   Sample code:   public function doMobileUploadT ...

随机推荐

  1. ASP.NET Zero--11.一个例子(4)商品分类管理-数据检验

    虽然已经可以添加商品分类,但还需进行优化,比如:用户是否输入.输入字符串是否有格式限制等等. 打开添加分类按钮,名称不输入任何字符,直接保存,会发现列表添加一条空记录.在实际项目中,这是不允许出现的事 ...

  2. Flexible 弹性盒子模型之CSS flex-wrap 属性

    实例 让弹性盒元素在必要的时候拆行: display:flex; flex-wrap: wrap; 复制 效果预览 浏览器支持 表格中的数字表示支持该属性的第一个浏览器的版本号. 紧跟在 -webki ...

  3. Oracle常用查询

    -- 创建Oracle sequence create sequence SEQ_XXHF minvalue 1 maxvalue 9999999999999999999999999999 start ...

  4. Jquery Easyui与Jquery Bootstrap(Metronic Bootstrap)的简单比较

    1,通常来看WEB前端用 bootstrap 比较好,后台用EASYUI比较好.Easyui适合工厂企业的管理系统如ERP,CRM之类的,Bootstrap适用于多屏跨设备浏览. 简言之,一个适合上班 ...

  5. 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)

    做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...

  6. cuda编程(一)

    环境安装和例程运行 显卡主要有两家,ATI.NVIDIA,简称A卡和N卡.随着GPU计算能力的上升,采用GPU并行计算来加速的应用越来越多. Nvidia创立人之一,黄仁勋(Jen-Hsun Huan ...

  7. javascript入门基础知识

    JavaScript介绍: 1. javascrip是互联网上最流行的脚本语言,可用于Web和HTML,更可广泛用于服务器.pc端.移动端. 2. javascript脚本语言: javascript ...

  8. 使用FormData,进行Ajax请求并上传文件

    前段时间做了个手机端的图片上传,为了用户体验,用ajax交互,发现了FromData对象,这里有详细解释https://developer.mozilla.org/zh-CN/docs/Web/API ...

  9. openstack私有云布署实践【11.1 计算nova - compute节点配置(科兴环境)】

    这里我只使用kxcompute1节点配置为示例,其它节点的配置基本是一样的,只是声明的管理IP不同而已   计算节点 # yum install openstack-nova-compute sysf ...

  10. C++类的实例化的两种方法

    C++ 类的实例化有两种方法: 直接定义对象: 先定义一个类:   class A { public: A(); virtual ~A(); ... ... };   类实现略. 用的时候: A a; ...