var uploadForm = new Ext.form.FormPanel({
layout: "form",
id:"upfilesyswin",
labelWidth: 300,
baseCls: "x-plain",
//锚点布局-
buttonAlign: "center",
fieldDefaults: { //统一设置表单字段默认属性
labelWidth: 80, //标签宽度
width: 300, //字段宽度
allowBlank: false,//是否允许为空
labelAlign: 'left'//标签对齐方式
},
items:
[
{
fieldLabel: "文件",
xtype: 'filefield',
width: 300,
id: "excelfile",
name: "excelfile",
buttonText: '选择文件'
},
{
fieldLabel: '选择表单',
id:'tableName',
xtype:"combo",
<span style="color:#ff0000;">hiddenName:'tableName',</span>
name:'tableName',
displayField: 'name',
valueField: 'abbr',
store:states
}
]
});
var win = Ext.create('widget.window', {
title: '导入',
modal:true,//模态的 后面的页面就不能点了
header: {
titlePosition: 2,
titleAlign: 'center'
},
closable: true,
closeAction: 'hide',
width: 600,
minWidth: 350,
height: 350,
tools: [{type: 'pin'}],
layout: {
type: 'border',
padding: 5
},
items: [ {
region: 'center',
items: [uploadForm]
}],
buttons: [{
text: '上传文件',
handler: function(){
var form = uploadForm.getForm();
if(form.isValid){
form.submit({
url: url,//后台处理的页面
waitMsg: '正在上传文件请稍后...',
method:'POST',
success: function(fp, o){
Ext.Msg.alert('提示信息', o.result.message);
win.close();
deleteDiv('upfilesyswin');
}
});
}
}
}]
});
String table = request.getParameter("tableName");
long starttime = System.currentTimeMillis();
request.setCharacterEncoding("utf-8");// 防止中文乱码
response.setCharacterEncoding("utf-8");
int sizeThreshold = 1024 * 6; // 缓存区大小
String basePath = this.getServletContext().getRealPath("/upload/");
File repository = new File(basePath); // 缓存区目录
long sizeMax = 1024 * 1024 * 2;// 设置文件的大小为2M
final String allowExtNames = "xls,xlsx";
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
diskFileItemFactory.setRepository(repository);
diskFileItemFactory.setSizeThreshold(sizeThreshold);
if(!repository.exists()){
repository.mkdir();
}
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
servletFileUpload.setSizeMax(sizeMax);
List<FileItem> fileItems = null;
String tableName = null;
InputStream fis =null;
try {
fileItems = servletFileUpload.parseRequest(request);
for (FileItem fileItem : fileItems) { //此处解析
@SuppressWarnings("unused")
long size = 0;
String fileName = fileItem.getName();
//System.out.println(fileName);
String fieldName = fileItem.getFieldName();
if("tableName".equals(fieldName)){
tableName = fileItem.getString();
}
if (fileName == null || fileName.trim().length() == 0)
continue;
String extName = fileName.substring(fileName.lastIndexOf(".") + 1);
说明一下问题所在:
1,combobox后台拿不到数据
2,在formPanel表单里面添加了filefield和combo两个部分,发现经过后台的代码只能拿到File,不能通过request.getParamter()拿到Combobox的值
解决问题:
combobox需要定义hiddenName才能通过request.getParamter拿到对应的值,但是奇怪的是在form表单中添加了filefield后Servlet也不能拿到combobox的值了。
在debug中发现ServletFileUpload解析request对象时返回的fileItems的数量和表单中的元素数量一致,猜想由于文件上传使用二进制流的形式,所以页面的元素也被封装到这个流里面去了,在后来的debug中发现消失的combobox值
总结:
由于本人暂时初学,不太理解浏览器的交互和servlet与tomcat的封装,在以后的研究中会逐渐补足本文的深层次原理