zoukankan      html  css  js  c++  java
  • jquery uploadify文件上传插件用法精析

    jquery uploadify文件上传插件用法精析

    CreationTime--2018年8月2日11点12分

    Author:Marydon

    一、参数说明

    1.参数设置

    $("#file_upload").uploadify({
        height        : 30,//高度
        swf           : '/uploadify/uploadify.swf',//指定swf文件
        uploader      : '/uploadify/uploadify.do',//后台处理的url
        width         : 120,//宽度
        buttonText: '上传图片', //按钮显示的文字
        fileTypeExts:  '*.*',//上传文件的类型,多个类型使用;分割'*.gif; *.jpg; *.png',默认值为:'*.*'
        fileTypeDesc: 'Image Files',//这个属性值必须设置fileTypeExts属性后才有效,用来设置选择文件对话框中的提示文本,默认值为:All Files
        formData: {'someKey':'someValue','someOtherKey':1},//发送给后台的其他参数通过formData指定
        queueID: 'fileQueue',//可以为DOM元素的id,设置队列样式, 默认值为false,队列id动态生成,不带#
        auto: true,//选择文件后自动上传,默认值为:true
        multi: true,//设置为true将允许多文件上传,默认值为:true
        buttonClass:'xttblog',//上传按钮的样式
        buttonImage:'',//按钮的图片路径
        buttonCursor:'hand',//鼠标指针悬停在按钮上的样子,默认值为:hand
        checkExisting:'/uploadify/check-exists.do',//文件的路径,检查目标文件夹中是否已上载的文件的名称.如果文件名不存在,该脚本将返回1,如果文件名存在或0,默认值为false
        debug:true,//打开swfupload调试模式,默认值为:false
        fileObjName:'Filedata',//后台可以通过这个名字获取到文件对象,默认值为:Filedata
        fileSizeLimit:'',//允许文件上传的最大大小.这个值可以是数字或字符串.如果它是一个字符串,它接受一个单位(B,KB,MB,GB),默认单位为KB。值设置为0,表示要上传的文件大小无限制(单文件大小)
        itemTemplate:'',//选择不同的HTML模板,添加上传文件到上传队列。主要有4种模板:instanceID(uploadify实例id)、fileID(文件id)、fileName(文件名字)、fileSize(文件大小).例如:${fileName},默认值为:false
        method:'POST',//POST或GET,默认值为post
        overrideEvents:['onUploadProgress'],//重写事件,onUploadProgress进度条不更新,jsonArray,默认值为:空数组[]
        preventCaching:true,//是否缓存,默认值为:true不缓存
        progressData:'percentage',//进度条percentage百分百、speed上传速度更新,默认值为:percentage
        queueSizeLimit:999,//队列大小,超过将触发onselecterror事件,和uploadLimit类似,默认值为:999
        removeCompleted:true,//上传完成后是否删除上传队列,默认值为:true
        removeTimeout:3,//上传完成后,延迟3秒删除队列,默认值为:3秒
        requeueErrors:true,//如果为true上传失败后将继续尝试再次上传,默认值为:fasle
        successTimeout:30,//文件上传成功后服务端应返回成功标志,此项设置返回结果的超时时间,默认值为:30秒
        uploadLimit:999,//最大上传文件数量,如果达到或超出此限制将会触发onUploadError事件,默认值为:999
    });

    2.事件设置

    $("#file_upload").uploadify({
        onCancel : function(file) {
            //移除文件时触发
        },
        onClearQueue:function(queueItemCount){
            //当调用函数cancel方法且queueItemCount>1时才触发,queueItemCount参数为被取消上传的文件数量
        },
        onDestroy:function(queueItemCount){
            //当destory方法被调用时触发
        },
        onDialogClose:function(queueData){
            //当文件浏览框关闭时触发,如果将此事件被重写,则当向队列添加文件上传出错时不会弹出错误消息提示
            //queueData对象包含如下属性:
            //filesSelected 文件选择对话框中共选择了多少个文件
            //filesQueued 已经向队列中添加了多少个文件
            //filesReplaced 已经向队列中替换了多少个文件
            //filesCancelled 取消了多少个文件
            //filesErrored 出错了多少个文件
        },
        onDialogOpen:function(){
            //当文件选择对话框弹出时立即出发,但可能在文件选择对话框被关闭之前并不能全部执行
        },
        onDisable:function(){
            //当disable方法禁用Uploadify上传按钮时被调用时触发
        },
        onEnable:function(){
            //当disable方法启用Uploadify上传按钮时被调用时触发
        },
        onFallback:function(){
            //当Uploadify初始化过程中检测到当前浏览器不支持flash时触发
            alert("当前浏览器未安装或未启用flash插件,无法进行文件上传!");
        },
        onInit:function(){//首次初始化Uploadify结束时触发
        },
        onQueueComplete:function(queueData){
            //文件上传队列处理完毕后触发,queueData对象包含如下属性:
            //uploadsSuccessful上传成功的文件数量
            //uploadsErrored上传失败的文件数量
        },
        onSelect:function(file){//选择文件后向队列中添加每个上传任务时都会触发
        },
        onSelectError:function(file, errorCode, errorMsg){
            //选择文件后向队列中添加每个上传任务时如果失败都会触发
            //file文件对象
            //errorCode错误代码如下:
            //QUEUE_LIMIT_EXCEEDED任务数量超出队列限制;
            //FILE_EXCEEDS_SIZE_LIMIT文件大小超出限制;
            //ZERO_BYTE_FILE文件大小为0
            //INVALID_FILETYPE文件类型不符合要求
            //errorMsg错误提示,可通过'this.queueData.errorMsg'定制
        },
        onSWFReady:function(){//Flash文件载入成功后触发
        },
        onUploadComplete:function(file){//每个文件上传完毕后无论成功与否都会触发
        },
        onUploadError:function(file, errorCode, errorMsg, errorString){
            //文件上传出错时触发,参数由服务端程序返回
        },
        onUploadProgress:function(file, bytesUploaded, bytesTotal, totalBytesUploaded, totalBytesTotal){
            //处理上传队列的过程中会多次触发此事件,每当任务状态有更新时都会触发
            //file文件对象
            //bytesUploaded已上传的字节数
            //bytesTotal文件总字节数
            //totalBytesUploaded当前任务队列中全部文件已上传的总字节数
            //totalBytesTotal当前任务队列中全部文件的总字节数
        },
        onUploadStart:function(file){//当文件即将开始上传时立即触发
        },
        onUploadSuccess:function(file, data, response){
            //当文件上传成功时触发
            //file文件对象
            //data服务端输出返回的信息,数据格式必须是字符串,否则接收不到
            //response有输出时为true,如果无响应为false,如果返回的是false,当超过successTimeout设置的时间后假定为true
        }
    });

    3.方法调用

    cancel(fileID, suppressEvent)
    用途:

      取消队列中的任务,不管此任务是否已经开始上传

    参数说明:
      fileID要取消的文件ID,如果为空则取消队列中第一个任务,如果为'*'则取消所有任务
      suppressEvent是否阻止触发onUploadCancel事件,当清空队列时非常实用

    示例:

    $('#file_upload').uploadify('cancel');// 取消第一个
    $('#file_upload').uploadify('cancel','*');// 清空队列

    destroy()
    用途:

      销毁Uploadify实例并将文件上传按钮恢复到原始状态

    示例:

    $('#file_upload').uploadify('destroy');// 销毁Uploadify实例

    disable(setDisabled)
    用途:

      禁用或启用文件浏览按钮

    参数说明:
      setDisabled – 设置为true表示禁用,false为启用

    示例:

    $('#file_upload').uploadify('disable',true);// 禁用按钮

    settings(name, value, resetObjects)
    用途:

      获取或设置Uploadify实例参数

    参数说明:
      name – 属性名称,如果只提供属性名称则表示获取其值
      value – 属性值
      resetObjects – 设置为true时,更新postData对象将清空现有的值。否则,新的值将被添加到其末尾

    示例:

    $('#file_upload').uploadify('settings','buttonText','BROWSE');// 将按钮参数的值改为BROWSE
    $('#file_upload').uploadify('settings','buttonText'));// 获取到按钮参数的值 

    stop()
    用途:

      停止当前正在上传的任务

    示例:

    $('#file_upload').uploadify('stop');//停止上传

    upload(fileID)
    用途:

      立即上传指定的文件,如果fileID为’*'表示上传所有文件,要指定上传多个文件,则将每个文件的fileID作为一个参数

    示例:

    $('#file_upload').uploadify('upload','*');// 开始上传所有文件

    二、调用

      第一步:页面随意设置一个id="file_upload"的html元素

    <!-- 文件上传 -->
    <div id="file_upload"></div>
    

      说明:指定一个dom元素的id,该dom元素在uploadify初始化后会被Flash按钮代替,这个dom元素相当于一个占位符。

      第二步:页面加载完毕后,绑定并设置参数

    // 页面加载完毕后,才能获取到file_upload这个dom对象
    $(function(){
        $('#file_upload').uploadify({
            // 参数配置
        });
    }); 

      加载成功,页面元素展示

    三、数据交互

    1.前台如何传参?

      方法一:get传参

      方式一(正确方式):通过onUploadStart实现(推荐使用)

    $('#file_upload').uploadify({
        'method', 'get',
        'buttonText' : '添加文件',
        'fileTypeExts' : '*.gif; *.jpg; *.png;*.pdf;*.zip;',// 文件类型限制
        'fileTypeDesc' : '请选择gif jpg png pdf zip类型的文件',// 文件类型描述
        'swf' : baseUrl + '/uploadify/flash/uploadify.swf',// flash插件
        'uploader' : baseUrl + '/uploadFile.do',// 上传的文件请求处理
        'onDialogClose' : function(queueData) {// 选择文件窗口关闭时,触发
             
        },
        'onUploadStart' : function(file){// 文件上传前,触发
            // 请求参数:上传每个文件的同时提交到服务器的额外数据,中文需要编码
            $('#file_upload').uploadify("settings","formData",{
                'param1' : encodeURI('测试文件上传传参'),
                'param2' : $('#aa').val()// 动态参数
            });
        },
        'onUploadSuccess' : function(file, data, response) {// 上传成功
            window.open(baseUrl + '/fileList.jsp');
        },
        'onUploadError' : function(file, errorCode, errorMsg, errorString) {// 上传失败
             
        },
        'onFallback' : function(){// 文件上传按钮加载失败
            alert("当前浏览器未安装或未启用flash插件,无法进行文件上传!");
        }
    });

      方式二(错误实现方式):直接声明

      直接声明 'formData' : {'param1': encodeURI('测试文件上传传参')},这种方式后台接收不到传递的参数。

      方法二:post传参

      方式一:通过onUploadStart实现(推荐使用)

    $('#file_upload').uploadify({
        'method', 'post',// 默认值为post,可以不声明
        'buttonText' : '添加文件',
        'fileTypeExts' : '*.gif; *.jpg; *.png;*.pdf;*.zip;',// 文件类型限制
        'fileTypeDesc' : '请选择gif jpg png pdf zip类型的文件',// 文件类型描述
        'swf' : baseUrl + '/uploadify/flash/uploadify.swf',// flash插件
        'uploader' : baseUrl + '/uploadFile.do',// 上传的文件请求处理
        'onDialogClose' : function(queueData) {// 选择文件窗口关闭时,触发
            
        },
        'onUploadStart' : function(file){// 文件上传前,触发
            // 请求参数:上传每个文件的同时提交到服务器的额外数据,中文需要编码
            $('#file_upload').uploadify("settings","formData",{
                'param1' : encodeURI('测试文件上传传参'),
                'param2' : $('#aa').val()// 动态参数
            });
        },
        'onUploadSuccess' : function(file, data, response) {// 上传成功
            window.open(baseUrl + '/fileList.jsp');
        },
        'onUploadError' : function(file, errorCode, errorMsg, errorString) {// 上传失败
            
        },
        'onFallback' : function(){// 文件上传按钮加载失败
            alert("当前浏览器未安装或未启用flash插件,无法进行文件上传!");
        }
    });

      方式二: 直接声明

      'formData' : {'param1': encodeURI('测试文件上传传参')},

    2.后台如何接收到参数?

      方式一对应的接收参数的方法为:

    // 通过指定onUploadStart()获取参数
    String param1 = request.getParameter("param1");
    // 解码
    param1 = URLDecoder.decode(param1, "utf-8");

      方式二对应的接收参数方法为: 

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
        // 通过设置formData获取参数
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletContext servletContext = this.getServletConfig().getServletContext();
        File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
        factory.setRepository(repository);
        ServletFileUpload upload = new ServletFileUpload(factory);
        try {
            List<FileItem> items = upload.parseRequest(req);
            // 7.对所有请求信息进行判断
            Iterator<FileItem> iter = items.iterator();
            while (iter.hasNext()) {
                FileItem item = iter.next();
                // form表单格式
                if (item.isFormField()) {
                    String paramName = item.getFieldName();
                    if ("param1".equals(paramName)) {
                        String paramValue = item.getString();
                        // 解码
                        paramValue = URLDecoder.decode(paramValue, "utf-8");
                        System.out.println("参数名:" + paramName + "=" + paramValue);
                    }
                } else {
                    // 文件格式处理 TODO
                }
            }
     
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    3.小结:

      推荐使用第一种方式进行传参;

      不管是get传参还是post传参,参数值为中文时,都需要先进行编码,否则后台接收到的数据乱码(比如:使用encodeURI());

      不管在初始化的时候,定义的uploadify对象,定义的是post还是get,最终是以post方式进行提交的。

    四、如何设置手动上传?

      第一步:设置参数

      'auto' : false,

      第二步:页面设置按钮

    <div id="ctrlUpload">
        <a href="javascript:;" onclick="$('#file_upload').uploadify('upload', '*');" class="Button" 
            onmouseover="javascript:this.className='ButtonOver'" onmouseout="javascript:this.className='Button'">
                    上传所有
        </a>    
        <a href="javascript:;" onclick="$('#file_upload').uploadify('cancel', '*');$('#ctrlUpload').hide();" class="Button"
            onmouseover="javascript:this.className='ButtonOver'" onmouseout="javascript:this.className='Button'">
                    取消上传
        </a>	
    </div>
  • 相关阅读:
    图像特征工程
    神经网络在多分类上的应用——数据预处理
    Robotics Lab3 ——图像特征匹配、跟踪与相机运动估计
    Robotics Lab2——相机模型,点云图拼接与深度测量
    Robotics Lab1 —— 基于颜色特征的目标识别与追踪实验
    【Ubuntu16.04】解决Qt安装包(.run文件)不能用./命令执行的问题
    【ROS系统】创建消息(msg)后使用rosmsg命令报错的解决办法
    【ROS系统】执行roslaunch命令启动launch文件提示Invalid roslaunch XML syntax错误的解决办法
    【ROS系统】解决找不到用户工作空间下的程序包的问题——E:No such package
    【UEFI+GPT/BIOS+MBR】两种模式在Windows系统下安装Ubuntu系统
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9406120.html
Copyright © 2011-2022 走看看