uploadifive 1.1.2 动态传参
之前用过Flash版本的uploadify,写过一篇关于uploadify动态传参的文章(点击打开链接)。后来有了HTML5版本的上传控件,叫uploadifive,测试着用了一下,效果还不错。这里主要说一下动态传参的问题。
1.控件初始化:
在页面载入完成的时候,初始化控件如下,跟uploadify类似:
$("#file_upload").uploadifive({
'fileObjName': 'fileData',
'auto': false,
'buttonText': "选择文件",
'buttonClass': 'btn btn-primary',
'height': '30',
'width': '200',
'removeCompleted': true,
'uploadScript': '/FileUpload/Upload', //这里是通过MVC里的FileUpload控制器里的Upload 方法
'queueID': 'uploadfileQueue',
'multi': true
//,'formData': { 'ID': 11 }----由于这里初始化时传递的参数,当然就这里就只能传静态参数了
});
2.动态传参数:
动态传参还是通过 formData参数来完成,就是在上传之前动态能formData参数赋值。由于uploadifive并没有提供setting方法,所以这里能只能通过这种方式完成:
var myid=1234;
$('#file_upload').data('uploadifive').settings.formData = { 'ID': myid}; //动态更改formData的值
$('#file_upload').uploadifive('upload'); //上传
3.后台函数及取值
后台是通过asp.net mvc方式完成的,将上传函数放在了控制器里面。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Upload(HttpPostedFileBase fileData, long ID)//fileData即是文件的信息,ID即为动态传递的参数,可以直接取值
{
return Json(new
{
FileName = fileData.FileName,
MyID = ID
});
}
当然也可以传递多个参数。
官方文档上并没有直接通过设置setting的值,网上了找了半天,
参考了这篇文章中的知识点http://stackoverflow.com/questions/14057038/uploadifive-formdata-passing-through-multi-select-array/14084481。
<link type="text/css" href="../JS/uploadifive/uploadifive.css" rel="stylesheet" />
<script type="text/javascript" src="../Easyui/jquery.min.js"></script>
<script type="text/javascript" src="../JS/uploadifive/jquery.uploadifive.js"></script>
$('#file_upload').uploadifive({
'auto': false, //是否自动上传,默认true
'multi': false,
'dnd': true, //拖放
'uploadScript': '../Pub/RambleHandler.ashx', // 服务器处理地址
'cancelImg': '../JS/uploadifive/uploadifive-cancel.png',
//'itemTemplate': '<div class="uploadifive-queue-item">\
// <a class="close" href="#">X</a>\
// <div><span class="filename"></span><span class="fileinfo"></span></div>\
// <div class="progress">\
// <div class="progress-bar"></div>\
// </div>\
// </div>',
//'checkExisting': 'url',
'buttonText': "请选择文件", //按钮文字
'height': 30, //按钮高度
'width': 120, //按钮宽度
'fileSizeLimit': "2GB", //上传文件的大小限制 0则表示无限制
'uploadLimit': 1, //上传文件数
'queueSizeLimit': 1, //一次可以在队列中拥有的最大文件数
'fileType': 'image/jpeg', //文件类型(mime类型),要允许所有文件,请将此值设置为false,多个类型使用数组形式['image/jpeg','video/mp4']
//'formData': { "imgType": "normal" }, //提交给服务器端的参数
'overrideEvents': ['onDialogClose', 'onError'], //onDialogClose 取消自带的错误提示
'onFallback': function () { //如果浏览器没有兼容的HTML5文件API功能,则在初始化期间触发
alert('浏览器不支持HTML5,无法上传!');
},
'onSelect': function (queue) { //选择的每个文件触发一次,无论它是否返回和错误。cancelled:文件数量取消(未替换) count:队列中的文件总数 errors:返回错误的文件数 queued:添加到队列的文件数 replaced:文件替换的数量 selected:所选文件的数量
//return false;
},
'onDrop': function (file, fileDropCount) {
},
'onAddQueueItem': function (file) {
},
'onClearQueue': function (queue) {
},
'onCancel': function (file) {
},
'onError': function (errorType, file) {
if (file != 0) {
var settings = $('#file_upload').data('uploadifive').settings;
switch (errorType) {
case 'UPLOAD_LIMIT_EXCEEDED':
layer_Msg("上传的文件数量已经超出系统限制的" + settings.queueSizeLimit + "个文件!");
break;
case 'FILE_SIZE_LIMIT_EXCEEDED':
layer_Msg("文件 [" + file.name + "] 大小超出系统限制的" + $('#file_upload').uploadifive('settings', 'fileSizeLimit') + "大小!");
break;
case 'QUEUE_LIMIT_EXCEEDED':
layer_Msg("任务数量超出队列限制");
break;
case 'FORBIDDEN_FILE_TYPE':
layer_Msg("文件 [" + file.name + "] 类型不正确!");
break;
case '404_FILE_NOT_FOUND':
layer_Msg("文件未上传成功或服务器存放文件的文件夹不存在");
break;
}
}
},
//'onProgress': function (file, e) { //每次文件上传都有进度更新时触发 e:事件(lengthComputable:布尔值,指示文件的长度是否可计算 loaded:加载的btyes数 total:要加载的总字节数 )
//},
'onUpload': function (filesToUpload) { //在使用upload方法调用的上载操作期间触发一次 filesToUpload:需要上传的文件数
if (filesToUpload < 1) {
layer_Msg("未选择任何文件");
return false;
}
},
'onUploadFile': function (file) { //每次启动的文件上载都会触发一次。file:正在上载的文件对象
$('#file_upload').data('uploadifive').settings.formData = { id: id, point: point, type: type, oldFile: name }; //动态更改formData的值
},
'onUploadComplete': function (file, data) { //对于完成的每个文件上载,触发一次。
if (data) {
try {
data = JSON.parse(data);
if (data.result === true) {
name = data.msg;
layer_Msg("上传成功");
} else {
layer_Msg(data.msg);
}
} catch (e) {
alert(data);
}
}
},
'onQueueComplete': function (uploads) { //队列中的所有文件完成上传后触发。attempts:在上次上载操作中尝试的文件上载次数 successful:上次上载操作中成功上载文件的数量 errors:在上次上载操作中返回错误的文件上载数 count:从此UploadiFive实例上载的文件总数
}
});
<input type="file" name="file_upload" id="file_upload" />
Uploadifive:
'fileType':[
"application/pdf",
"application/msword",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"application/vnd.ms-excel",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"application/vnd.ms-powerpoint",
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
"application/zip",
"application/x-rar-compressed",
],//限制允许上传的后缀
Uploadifive 格式过滤和Uploadify不太一样;
Uploadify:
'fileTypeExts': '*.doc; *.docx; *.xlsx; *.xls; *.ppt; *.pptx; *.pdf; *.zip; *.rar', //限制允许上传的图片后缀
uploadifive 1.1.2 动态传参的更多相关文章
- js函数动态传参
js函数体内可以通过arguments对象来接收传递进来的参数,利用这一对象属性可以动态传参. function box() { return arguments[0]+' | '+arguments ...
- uploadify的用法与动态传参 提供demo下载
---恢复内容开始--- 官网:http://www.uploadify.com/ 一款不错的上传插件.官方文档http://www.uploadify.com/documentation/ 用法 ...
- Postman 串行传参和动态传参详解
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 用Postman做接口测试的时候,要把多条用例一起执行,就需要把用例连接起来,一次性执行 目录 串行传参 动态传参 使用 ...
- python之路--动态传参,作用域,函数嵌套
一 . 动态传参(重点) * , ** * 与 ** * 在形参位置. * 表示不定参数, 接收的是位置参数 接收到的位置参数的动态传参: 都是元组 def eat(*food): # 在形参这里 ...
- python----函数的动态传参
函数的动态传参 *args 将所有的实参的位置参数聚合到一个元组,并将这个元组赋值给args 有些时候,对于函数,传入的实参数量可能是不固定的,也就是动态的,这个时候我们就需要用到函数的动态传参.下面 ...
- 在Java中动态传参调用Python脚本
最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...
- python函数的动态传参.作用域与命名空间
一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi ...
- python记录_day10 动态传参 命名空间 作用域
一.动态传参 动态传参用到 *args 和 **kwargs ,*号表示接收位置参数,args是参数名:**表示接收关键字参数,kwargs是参数名 def chi(*food): print(foo ...
- [Android] 配置build.gradle 动态传参
(1)一个Android工程中有一个build.gradle是负责Project范围的,而Module中又有各自的build.gradle是专门负责模块的. (2)在Gradle中Task是一等公民, ...
随机推荐
- MySQL Percona Toolkit--pt-osc与online DDL选择
pt-osc和online ddl选择 1.如果表存在触发器,不能使用pt-osc.2.如果新增唯一索引,不建议使用pt-osc,以免数据丢失.3.修改索引.外键.列名时,优先选择使用ALGORITH ...
- 进程间通信之数据传输--FIFO
One of the fundamental features that makes Linux and other Unices useful is the “pipe”. Pipes allow ...
- AXURE RP EXTENSION For Chrome----解决办法
出现这个问题是因为chrome://extensions/中没有安装扩展程序 解决办法: 步骤一:情景再现,打开某个html会出现如下页面,不停地提示你安装插件 步骤二:如果点击安装扩展程序,能够成功 ...
- python笔记42-http请求命令行工具(httpie)
前言 通常我们需要快速的测试某个接口通不通,一般linux上用curl去发http请求,但是这个命令行工具语法有点复杂了,不够直观. python有一个给人类使用的requests库,非常的简单方便. ...
- 微信小程序之执行环境
明白了小程序中的 JavaScript 同浏览器以及NodeJS有所不同后,开发者还需要注意到另外一个问题,不同的平台的小程序的脚本执行环境也是有所区别的. 小程序目前可以运行在三大平台: iOS平台 ...
- c#2.0锐利体验《泛型编程》读书笔记
1.c#泛型及机制 Class Stack<T> { } T 其实为type的缩小,不过也可为其他字符代替T ,被称为“泛型类型” T为晚绑定的,在编译的时候还不能确定T的确切类型. 2 ...
- Dubbo源码分析:Server
Server接口是开启一个socket服务.服务实现有netty,mina,grizzly的. 抽象时序图 获取NettyServer时序图 Transporter类图 Server 类图
- tensorflow API _ 4 (Logging with tensorflow)
TensorFlow用五个不同级别的日志信息.为了升序的严重性,他们是调试DEBUG,信息INFO,警告WARN,错误ERROR和致命FATAL的.当你配置日志记录在任何级别,TensorFlow将输 ...
- LG1036
当我们看到这道题的时候,我们不仅大吼一声,这不就是搜索嘛. 于是搜索两大刀!搜索目标和搜索状态! 搜索目标:求选数的方案,以及他们的和是否为质数. 搜索状态: 1.从后往前分析目标(或从前往后):和是 ...
- [后端]gitlab之gitlab-ci自动部署
转发:https://www.jianshu.com/p/df433633816b 简介 gitlab-ci全称是gitlab continuous integration的意思,也就是持续集成.中心 ...