jquery uploadify如何取消已上传成功文件


Posted in Javascript onFebruary 08, 2017

如何使用uploadify进行文件上传,各位都能够在网上找到,但是需要注意版本号.我这里仅仅说一下,在文件已经成功上传到服务器之后,如何取消文件的上传.

我使用的是自动上传,即将'auto'属性设置为true.

1.首先我们要设置cancelmg属性,即设置文件上传成功后,显示在文件上的关闭图片.这里需要修改对应CSS中的代码

.uploadify-queue-item .cancel a { 
  background: url('../img/uploadify-cancel.png') 0 0 no-repeat; 
  float: right; 
  height: 16px; 
  text-indent: -9999px; 
  width: 16px; 
}

将这里url中的uploadify-cancel.png的地址设置正确.这时可以看到上传的文件后会显示对应的取消关闭图片.当然我们不修改源码,将图片放置在img文件夹下也可以.

2.当我们使用自动上传,点击文件对应上的关闭,这时是不会触发'onCancel'事件的,(onCancel事件是针对不自动上传时进行触发的)所以我们需要需要绑定对应的事件到取消图片上.

3.当每个图片上传成功之后,都会触发”onUploadSuccess”事件.所以我们将绑定操作写在onUploadSuccess函数中.

4.代码如下:

onUploadSuccess:function(file, data, response) { 
    var cancel=$('#fileQueue .uploadify-queue-item[id="' + file.Id + '"]').find(".cancel a"); 
if (cancel) { 
  cancel.attr("deletefileid",file.id); 
  cancel.click(function () { 
    //我的处理逻辑 
    //1.首先调用ajax 传递文件名到后台,后台删除对应的文件(这个我就不写了) 
    //2.从后台返回的为true,表明删除成功;返回false,表明删除失败 
     var deletefileid = cancel.attr("deletefileid"); 
     $("#uploadify").uploadify("cancel",deletefileid);//将上传队列中的文件删除. 
  }); 
} 
}

5.$("#uploadify").uploadify("cancel",deletefileid); 这会调用uploadify中的cancel方法,但是cancel方法中有一个问题,通过查看源码,发现cancel方法并没有将队列中的文件删除,只是在前台删除了对应的div.这样就会导致,假设当我上传文件A,已经上传成功,这时我点击删除图片,取消文件A的上传,这时前台A文件消失,但是假如我再次上传文件A,会提示我已经上传过文件A了,这显然是有问题的.
其实,uploadify的cancel方法就是针对还没有上传到服务器的文件,这时点击取消,调用cancel方法,即cancel方法针对的是还没有上传到服务器的文件.

这时我们需要修改源码将对应需要删除的文件在队列中进行删除.

cancel : function(fileID, supressEvent) { 
 
  var args = arguments; 
 
  this.each(function() { 
    // Create a reference to the jQuery DOM object 
    var $this    = $(this), 
      swfuploadify = $this.data('uploadify'), 
      settings   = swfuploadify.settings, 
      delay    = -1; 
 
    if (args[0]) { 
      // Clear the queue 
      if (args[0] == '*') { 
        var queueItemCount = swfuploadify.queueData.queueLength; 
        $('#' + settings.queueID).find('.uploadify-queue-item').each(function() { 
          delay++; 
          if (args[1] === true) { 
            swfuploadify.cancelUpload($(this).attr('id'), false); 
          } else { 
            swfuploadify.cancelUpload($(this).attr('id')); 
          } 
          $(this).find('.data').removeClass('data').html(' - Cancelled'); 
          $(this).find('.uploadify-progress-bar').remove(); 
          $(this).delay(1000 + 100 * delay).fadeOut(500, function() { 
            $(this).remove(); 
          }); 
        }); 
        swfuploadify.queueData.queueSize  = 0; 
        swfuploadify.queueData.queueLength = 0; 
        // Trigger the onClearQueue event 
        if (settings.onClearQueue) settings.onClearQueue.call($this, queueItemCount); 
      } else { 
        for (var n = 0; n < args.length; n++) { 
          swfuploadify.cancelUpload(args[n]); 
          /* 添加代码 */ 
          delete swfuploadify.queueData.files[args[n]]; 
          swfuploadify.queueData.queueLength = swfuploadify.queueData.queueLength - 1; 
          /* 添加结束 */ 
          $('#' + args[n]).find('.data').removeClass('data').html(' - Cancelled'); 
          $('#' + args[n]).find('.uploadify-progress-bar').remove(); 
          $('#' + args[n]).delay(1000 + 100 * n).fadeOut(500, function() { 
            $(this).remove(); 
          }); 
        } 
      } 
    } else { 
      var item = $('#' + settings.queueID).find('.uploadify-queue-item').get(0); 
      $item = $(item); 
      swfuploadify.cancelUpload($item.attr('id')); 
      $item.find('.data').removeClass('data').html(' - Cancelled'); 
      $item.find('.uploadify-progress-bar').remove(); 
      $item.delay(1000).fadeOut(500, function() { 
        $(this).remove(); 
      }); 
    } 
  }); 
 
},

总结

以上是我针对如何取消已经上传成功的文件的方法.当然如果不是自动上传,那么不用修改uploadify,直接删除就好。

Javascript 相关文章推荐
父窗口获取弹出子窗口文本框的值
Jun 27 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
Jan 23 Javascript
让复选框只能选择一项的方法
Oct 08 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
Sep 14 Javascript
js判断radiobuttonlist的选中值显示/隐藏其它模块的实现方法
Aug 25 Javascript
js实现tab选项卡切换功能
Jan 13 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
Jan 16 Javascript
vue组件横向树实现代码
Aug 02 Javascript
Vue中使用clipboard实现复制功能
Sep 05 Javascript
解决layui 表单元素radio不显示渲染的问题
Sep 04 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
Sep 16 Javascript
JS前端广告拦截实现原理解析
Feb 17 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
Feb 08 #Javascript
用move.js库实现百叶窗特效
Feb 08 #Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
Feb 08 #Javascript
Move.js入门
Feb 08 #Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 #Javascript
详解Javascript百度地图接口开发文档中的类和方法
Feb 07 #Javascript
简单实现bootstrap导航效果
Feb 07 #Javascript
You might like
PHP自动更新新闻DIY
2006/10/09 PHP
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
用原生js做单页应用
2017/01/17 Javascript
浅谈es6 javascript的map数据结构
2017/12/14 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
详解uniapp的全局变量实现方式
2021/01/11 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Python作用域用法实例详解
2016/03/15 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
Python计算时间间隔(精确到微妙)的代码实例
2019/02/26 Python
泰国第一在线超市:Tops
2021/02/13 全球购物
公务员职务工作的自我评价
2013/11/01 职场文书
体育个人工作总结
2015/02/09 职场文书
幼儿园六一主持词
2015/06/30 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
python用tkinter开发的扫雷游戏
2021/06/01 Python
Java使用Unsafe类的示例详解
2021/09/25 Java/Android
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS