extjs实现简单的多文件上传(不借助任何插件),以及包含处理上传大文件的错误的各种处理办法
在extjs的学习过程中,有遇到过有关多文件上传的问题,但是网上的大多数都是专门的去实现多文件上传而去做的组件之类的,没有特别简单的方式,于是小白便做了下面的内容,只是通过动态的去添加extjs的自带的组件 filefield,然后有几个需要上传的文件,就动态添加几个这样的组件,从而实现简单的多文件上传。希望能给想做多文件上传,又不想借助别人封装好的组件或者flash来实现该功能的朋友们一点帮助。下面是效果图。
下面是有关的前台代码
//动态添加File组件的的函数
function addFileUp() {
var fileField = new Ext.form.File({
name:"newFiles",
width:440,
emptyText: '请选择文件',
fieldLabel: '附件',
buttonText: '选择文件',
allowBlank: false
})
newFieldsCount++;
if(newFieldsCount>=2)
{
Ext.getCmp("addONotice").setAutoScroll(true);
}
return fileField;
};
//添加公告()
function AddONotice() {
var form = new Ext.form.Panel({
id:"addONotice",
border: false,
fileUpload: true,
fieldDefaults: {
labelWidth: 70,
labelAlign:'right',
labelStyle:'padding-right:10px'
},
layout:'column',
bodyPadding: 10,
items: [{
style:'margin-top:6px',
xtype: 'textfield',
fieldLabel: '标题',
name: 'Title',
width:440,
allowBlank:false,
nanText:'输入格式错误',
},
{
style:'margin-top:6px',
xtype: 'combobox',
store:ToDeptTypeStore,
queryMode: 'remote',
editable:false,
displayField: 'title',
valueField: 'id',
fieldLabel: '目标类型',
emptyText: "请选择目标类型",
allowBlank:false,
name: 'ToDeptType',
width:220,
},
{
style:'margin-top:6px',
xtype: 'combobox',
store:deptStore,
queryMode: 'remote',
editable:false,
displayField: 'title',
valueField: 'id',
fieldLabel: '接收部门',
emptyText: "请选择接收部门",
allowBlank:false,
name: 'ToDeptID',
width:220,
},{
style:'margin-top:6px',
xtype: 'textarea',
fieldLabel: "内容",
name: 'Detail',
width:440
},{
style:'margin-top:6px',
xtype: 'textarea',
fieldLabel: "备注",
name: 'MemoInfo',
width:440
},{
xtype: 'filefield',
name: 'photo',
fieldLabel: '附件',
msgTarget: 'side',
allowBlank: false,
width:440,
emptyText: '请选择文件',
buttonText: '选择文件'
}
],
buttons: [{ text: '添加附件',
handler: function() {
form.add(addFileUp());
}
}, {text: '清空附件',
handler: function() {
form.items.each(function(item,index,length){
if(item.getName()=="newFiles")
{
this.destroy();
}
});
form.body.dom.scrollTop = 0;
form.setAutoScroll(false);
newFieldsCount = 0;
}
}, {text: '删除附件',
handler: function() {
var maxItemsLength = form.items.length-1;
if(form.items.items[maxItemsLength].getName()=="newFiles")
{
form.items.items[maxItemsLength].destroy();
newFieldsCount--;
form.body.dom.scrollTop = 0;
}
if(newFieldsCount<2)
{
form.setAutoScroll(false);
}
}
}]
});
var window = new Ext.window.Window({
modal: true,//蒙版
autoShow: true,
title: '添加公告',
width: 490,
height:420,
minWidth: 300,
minHeight: 200,
layout: 'fit',
items: form,
buttons: [{
text: '确认',
handler: function () {
if (!Ext.getCmp("addONotice").getForm().isValid()) {
Ext.MessageBox.alert("提示", "请填写完整信息在提交!");
return false;
}
form.getForm().submit({
url:path+"ONotice/AddONotice",
waitMsg:"添加中....",
params: { "uid":uid },
success:function(form,action){
var res = action.result;
if(res.success == 1){
Ext.MessageBox.alert("提示框", res.msg);
Ext.getCmp("ONoticeGrid").store.reload();
window.close();
return;
}else{
Ext.Msg.alert('提示',res.msg);
return;
}
},
failure:function(form,action){
Ext.MessageBox.alert("提示框", "添加失败!");
}
});
}
},{
text: '取消',
handler: function () {
window.close();
}
}]
}); }
下面是实现上传功能的主要的后台代码。
public bool fileLoad()
{
HttpFileCollection files = HttpContext.Current.Request.Files;
/// '状态信息
System.Text.StringBuilder strMsg = new System.Text.StringBuilder();
for (int iFile = ; iFile < files.Count; iFile++)
{
///'检查文件扩展名字
bool fileOK = false;
HttpPostedFile postedFile = files[iFile];
string fileName, fileExtension;
fileName = System.IO.Path.GetFileName(postedFile.FileName);
if (fileName != "")
{
fileExtension = System.IO.Path.GetExtension(fileName);
String[] allowedExtensions = { ".doc", ".xls", ".rar", ".zip", ".wps", ".txt", "docx", "pdf", "xls" };
for (int i = ; i < allowedExtensions.Length; i++)
{
if (fileExtension == allowedExtensions[i])
{
fileOK = true;
break;
} }
if (!fileOK) return false;
}
if (fileOK)
{
postedFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("~/oNoticeFiles/") + fileName);
}
}
return true;
}
在上传的时候,有时候会发现有一种问题,就是有时候连方法提交的时候,都会报错,后来经过资料查询,才发现,在.net 中 ,当request 包含的信息大于2M,就不允许提交这个请求了,就会照成Js错误,解决方法是在web.config 的配置文件中添加 一个配置文件 在<system.web>标签中添加<httpRuntime maxRequestLength="2097151" executionTimeout="3600"/> 意思是requerst请求可以在2g范围内。
当然,虽然可以通过配置上面的配置方式,还不能够保证上传的文件的大小,仍然有可能会出现超过规定内容的情况,一旦超过了这个规定大小,将会照成请求的abroted断开问题,经过很长一段时间跟我的前辈Bom wu的指定,我明白任何的submit都是ajax,然而,让我惊奇的是当断开连接的时候,他不进success跟failure(可能是因为我的框架使用了mvc),我在这里还不能确定你能否进入自身的回调函数的接口,但是如果你能够进入success,那么,你可以通过判断action来判断是否正常,然后返回提醒,如果不能够正常的进入回调函数,那么就可以通过ext.ajax.on("requestComplete",function(){});来监听到请求的结束,然后判断response的内容是否在正常,然后给出提示,这是后续的遇到的问题,我也记录在这里。
如果在有关方面大家有疑问,可以通过联系方式联系我。
最后,小白希望如果我的随笔给了大家一点帮助,希望大家能够赞一赞,小白花时间来总结记录这些内容也不容易,谢谢!
extjs实现简单的多文件上传(不借助任何插件),以及包含处理上传大文件的错误的各种处理办法的更多相关文章
- Notepad++插件安装和使用和打开大文件
版权声明:本文为博主皮皮http://blog.csdn.net/pipisorry原创文章,未经博主同意不得转载. https://blog.csdn.net/pipisorry/article/d ...
- 用异提交时,后台通过校验规则文件,校验不通过时,跳转到INPUT视图时,前台显示错误信息的解决办法
1.第一种: 最近项目使用了struts2的校验(其实我觉得后台校验,特别是struts的校验,完全可以放在其他地方处理,比如交给js或者业务逻辑),而且系统刚好还使用了extjs,此时问题出现了:假 ...
- python大文件迭代器的流式读取,之前一直使用readlines()对于大文件可以迅速充满内存,之前用法太野蛮暴力,要使用xreadlines或是直接是f,
#!/usr/bin/env python #encoding=utf-8 import codecs count =0L #for line in file("./search_click ...
- QQ上传大文件为什么这么快
今天和同事在群里讨论“QQ上传大文件/QQ群发送大文件时,可以在极短的时间内完成”是如何做到的. 有时候我们通过QQ上传一个几百M的文件,竟然只用了几秒钟,从带宽上限制可以得出,实际上传文件是不可能的 ...
- Hadoop如何将TB级大文件的上传性能优化上百倍?
这篇文章,我们来看看,Hadoop的HDFS分布式文件系统的文件上传的性能优化. 首先,我们还是通过一张图来回顾一下文件上传的大概的原理. 由上图所示,文件上传的原理,其实说出来也简单. 比如有个TB ...
- 使用百度webuploader实现大文件上传
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- web大文件上传(web应用---SSH框架)
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- 百度Webuploader 大文件分片上传(.net接收)
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- 大文件上传插件webupload插件
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- 使用原生Java Web来实现大文件的上传
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
随机推荐
- CSS的display属性,显示或隐藏元素
<html> <head> <script type="text/javascript"> function removeElement() { ...
- FW Docker为容器分配指定物理网段的静态IP
官方有关于网桥和IP配置的文档地址:https://docs.docker.com/articles/networking/ 1.宿主机(系统采用ubuntu-14.04.1-server-amd64 ...
- 【Java 进阶篇】【第二课】异常处理
概念 异常处理的存在是为了: 允许程序员跳过无法处理的问题,继续开发后续的工作,或根据异常做出更加聪明的处理方式. Java中存在一类对象叫“异常对象”. 当异常情况发生时,就会暗战预先的设定,抛 ...
- php--列表展示(小实训一月考)
效果图:
- CSS弹性盒布局
<html> <head> <meta charset="utf-8"/> <title></title> <st ...
- 兼容的获得event
function getEvent(e) { var e=window.event || event; return e.srcElement || e.target; }
- Object C语法学习笔记(一)
1.@property与@synthesize配对使用. @property预编译指令的作用是自动声明属性的setter和getter方法. @synthesize 创建了该属性的访问代码 功能:让编 ...
- Linux 下动态库 / 静态库(依赖)
一. 依赖动态库的动态库 libfun.so依赖动态库libtest.so(libfun.so动态库里的函数intnothing()调用了libtest.so里的intmytest()函数),而mai ...
- OO之美4(好代码与坏代码)
前言:写代码不仅仅要做到能与机器交流,更要做到能和人交流 编码规范:编码规范就是最佳实践,是前辈在编码这件事上的积累和总结,是智慧的延续和工业的实践,如下: ⑴命名规范 ⑵避免行数过多的方法 ⑶代码缩 ...
- Spring AOP 实现原理与 CGLIB 应用
https://www.ibm.com/developerworks/cn/java/j-lo-springaopcglib/ AOP(Aspect Orient Programming),也就是面向 ...