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 ...
随机推荐
- extjs MVC模式的个人看法
针对一个后台管理页面是mvc模式,后台也是mvc模式下的项目,要怎么去熟悉呢? 首先以我个人的认解,先从后台的管理界面来看,会有control,model,store,view:其中先看view的代码 ...
- Bootstrap 下拉菜单和滚动监听插件
一.下拉菜单 常规使用中,和组件方法一样,代码如下: //声明式用法 <div class="dropdown"> <button class="btn ...
- Angular自动双向绑定值
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> ...
- 针对JD-GUI
switch(0){ case 1001: JSONObject jsoObj; String data = null; boolean isclose = false; try{ jsoObj = ...
- 视频播放器开发中遇到的一些小问题MPMoviePlayerController
1 开发环境是 xcode6 ipad3真机 ios8.1.1越狱 需要添加以下代码 ,否则真机测试没有外音,只有耳机 NSError *setCategoryError = nil; ...
- ASP.NET 开发笔记1
1.GirdView 动态添加列 PostBack 后 模板列中的控件丢失的问题 http://blackboy51.blog.163.com/blog/static/511359122011910 ...
- sublime text主要快捷键列表
Ctrl+L 选择整行(按住-继续选择下行)Ctrl+KK 从光标处删除至行尾Ctrl+Shift+K 删除整行Ctrl+Shift+D 复制光标所在整行,插入在该行之前Ctrl+J 合并行(已选择需 ...
- 批量处理_cmd_matlab
cd \ cd D:\Projects_Face_Detection\Datasets\afw d: dir /b/s/p/w *jpg > Path_Images.txt 1.ground_t ...
- 针对应用程序池“xxxxxx”的模板永久性缓存初始化失败,解决方法
日志名称: Application 来源: Active Server Pages 日期: 2014-11-22 9:09:39 事件 I ...
- iOS 证书及配置文件介绍
1.Certification(证书) 证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种: 1)Developer Certification(开发证书) 安装在电脑上提供权限:开发人员通过 ...