公司老框架的一个页面需要用到文件上传,本以为修改一个配置参数即可解决,百度一番发现都在说这个第三方插件不支持文件多选功能,还有各种各样缺点,暂且不讨论这些吧。先完成领导安排下来的任务。

  任务一:支持多选添加文件

  任务二:支持批量添加文件

  我们先来说第二个任务吧,第二个任务相比较容易些,经过半天研究源码,发现他每次都将文件,添加到队列中“queue”然后不停的拿队列中的数据

  添加队列源码(大约在源码的第35行左右)

   this.postEvent = function(event, data)
{
data = data || null;
this.queue.push({event: event, data: data});
if (!this.is_processing) {
this.process();
}
}

  获取队列源码(大约在源码的第47行左右),拿到一条数据,就回调一次相应的方法

   this.process = function()
{
while (this.queue.length > ) {
this.is_processing = true;
var event_data = this.queue.shift();
this.handler.call(this.scope, event_data.event, event_data.data);
}
this.is_processing = false;
}

  经过大半天的调试,发现是这个问题造成的,从队列里拿到一条数据后,误认为上传已完成,直接执行下面的操作,我是这样解决他的,写了个定时器,实时监控队列中的个数,如果队列中的个数不为0,不继续执行其他的操作

解决方案部分截图:

源码修改

第一步:创建input标签时,新增属性:multiple: "multiple"(大约在源码的第283行左右)

     this.input_file = Ext.DomHelper.append(
button_container,
{
tag: 'input',
type: 'file',
size: 1,
multiple: "multiple",
name: this.input_name || Ext.id(this.el),
style: 'position: absolute; display: block; border: none; cursor: pointer'
},
true
);

第二步:修改添加文件到上传队列源码(大约在源码的第1050行左右)

  addFileToUploadQueue : function(browse_btn)
{
var input_file = browse_btn.detachInputFile(); input_file.appendTo(this.form);
input_file.setStyle('width', '100px');
input_file.dom.disabled = true;
var store = this.grid_panel.getStore();
for (var i = 0; i < input_file.dom.files.length; i++) {
if (i==0) {
store.add(
new Ext.ux.UploadDialog.FileRecord({
state: Ext.ux.UploadDialog.FileRecord.STATE_QUEUE,
filename: input_file.dom.value.replace(input_file.dom.files[0].name, input_file.dom.files[i].name),
note: this.i18n.note_queued_to_upload,
input_element: input_file
})
);
} else {
store.add(
new Ext.ux.UploadDialog.FileRecord({
state: Ext.ux.UploadDialog.FileRecord.STATE_QUEUE,
filename: input_file.dom.value.replace(input_file.dom.files[0].name, input_file.dom.files[i].name),
note: this.i18n.note_queued_to_upload
})
);
}
}
this.fsa.postEvent('file-added', input_file.dom.value);
},

第三步:其余部分源码添加条件约束(行号看图)

 注:若不添加条件约束,js会报错,添加的约束,在截图中的行号附近!!!!

演示

创作不易,转载请注明出处,觉得对你有帮助的话,帮忙推荐下,有不懂的地方,欢迎下方留言!~~

【全网首创】修改 Ext.ux.UploadDialog.Dialog 源码支持多选添加文件,批量上传文件的更多相关文章

  1. JMeter上传文件,并修改源码参数化Content-Disposition 的 filename

    一.JMeter上传文件 1.使用F12或抓包工具抓包对应接口 如下图为一个上传图片接口,抓包显示内容如下: 2.将抓包到的信息头内容填写到jmeter的HTTP信息头管理器 3.填写参数 由抓包的接 ...

  2. 修改Cosbench源码 支持s3的 http range request 测试场景

    在视频点播的业务应用场景中,用户使用了ffmpeg工具做视频实时转码用. 而ffmpeg使用range 请求.而Cosbench不支持这种测试场景,所以需要修改源码支持这种测试场景. HTTP 协议介 ...

  3. 修改json源码支持datetime序列化

    修改json源码支持datetime序列化 import json import datetime now = datetime.datetime.today() json.dumps(now) 抛出 ...

  4. ux.plup.File plupload 集成 ux.plup.FileLis 批量上传预览

    //plupload 集成 Ext.define('ux.plup.File', { extend: 'Ext.form.field.Text', xtype: 'plupFile', alias: ...

  5. ext上传文件到mysql上

    不废话,上代码: controller如下: /** * 上传附件 * @param request * @param baseBlob * @param response */ @RequestMa ...

  6. Ext.js多文件选择上传,

    工作了之后来到了一家用Ext.js的公司, 一开始的时候做项目, 我被分给一个做一个单表的增删改查, 再加上文件上传功能, 带我的老师让我自己研究一下Ext.js怎么多文件选择上传, 并且能获取到上传 ...

  7. 玩一把redis源码(一):为redis添加自己的列表类型

    2019年第一篇文档,为2019年做个良好的开端,本文档通过step by step的方式向读者展示如何为redis添加一个数据类型,阅读本文档后读者对redis源码的执行逻辑会有比较清晰的认识,并且 ...

  8. redis源码(一):为redis添加自己的列表类型

    本文档分为三大部分: 环境介绍与效果演示 redis接收命令到返回数据的执行逻辑 代码实现 文档的重点和难点在第三部分,完全阅读本文档需要读者具备基本的c语言和数据结构知识. 环境介绍和效果演示环境介 ...

  9. 鸿蒙内核源码分析(根文件系统) | 先挂到`/`上的文件系统 | 百篇博客分析OpenHarmony源码 | v66.01

    百篇博客系列篇.本篇为: v66.xx 鸿蒙内核源码分析(根文件系统) | 先挂到/上的文件系统 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...

随机推荐

  1. 写论文的第一天 hadoop环境搭建

    毕设日志_____2019.1.23 实验集群环境搭建 三台阿里云服务器 公网ip 内网ip 120.79.63.130   node2 172.17.17.58 112.74.50.240   主节 ...

  2. vs中的system指令

    vs中的system指令 system(“命令语句”);必须要用到头文件include<stdio.h> system里可以加许多指令 取消关机   shutdown -a 关机   sh ...

  3. Linux相关安装文档

    一.JDK环境安装 1.查看linux上是否存在已安装好的JDK (1)java -version openjdk version "1.8.0_181"OpenJDK Runti ...

  4. Linux--shell的awk--10

    一.awk介绍 全称:由Aho Weinberger Kernaighan三个人的首字母组合而成 1970年第一次出现在Unix机器上,后来在开源领域使用它 awk是一种单独的编程语言解释器 awk报 ...

  5. python 06 深浅拷贝

    目录 1. 小数据池 1.1 代码块 1.2 小数据池 1.3 执行顺序 (代码块--小数据池) 1.4 "=="和 "is" 2. 深浅拷贝 2.1 赋值 2 ...

  6. Django之上传图片,分页,三级联动

    Django1.8.2中文文档:Django1.8.2中文文档 上传图片 配置上传文件保存目录 1)新建上传文件保存目录. 2)配置上传文件保存目录. 后台管理页面上传图片 1)设计模型类. 2)迁移 ...

  7. “adobe premiere中画面和声音不同步” 解决方法

    一.背景 之前在segmentfault上过直播课,直播课有录制回播功能:尝试听了下直播课,发现视频太长了,感觉听起来非常花费学员的时间,在回放中其实有一些直播课里面的内容并不需要,所以准备剪辑一下, ...

  8. NLP(一)语料库和WordNet

    访问语料库 NLTK数据库的安装:http://www.nltk.org/data.html NLTK语料库列表:http://www.nltk.org/nltk_data/ 内部访问(以Reuter ...

  9. CodeForces 402 E Strictly Positive Matrix

    Strictly Positive Matrix 题解: 如果原来的 a[i][j] = 0, 现要 a[i][j] = 1, 那么等于 sum{a[i][k] + a[k][j]} > 1. ...

  10. codeforces 14E. Camels(多维dp)

    题目链接:http://codeforces.com/problemset/problem/14/E 题意:就是给出n个点要求画出t个波峰和t-1个波谷 很显然要t个波峰和t-1个波谷开始是波动一定是 ...