文件上传其实是一个很基本的页面操作,以前也做过。在jsp+servlet时,关键点是只要指定jsp用于提交上传文件资源的form的enctype属性为multipart/form- data即可。这个属性 其实是设置了提交的内容是以数据流的方式提交给servlet的。当然也包含了文件的流,这样在servlet里利用common- fileupload.jar里的接口方法,解析这个流,就可以获得上传的文件的信息。
今天在利用ext的js代替了jsp时,却碰到了点小麻烦。现在总结如下。
其实利用ext实现的原理是一样的,只是编写js的过程中要主要,当发送ajax请求时,要保证所发的请求是在enctype为multipart/form-data的form中,否则,后台无法解析上传文件信息。
对于表单的定义可以采用如下方法:
var uploadForm = new Ext.form.FormPanel({ url: "AuthManager.do?action=addCertificate",//ajax请求的地址 rame:true,//要设为true fileUpload:true,//一定要这一项,表明这个表单是做文件上传所用 id:'uploadForm', height:130, labelAlign: 'right', bodyStyle:'padding:6px 5px 0', //enctype : 'multipart/form-data', //其实这一项是没有用的,fileUpload:true的令一层意思也就是这个 items: new Ext.form.TextField({ xtype: 'textfield', //style:'margin-top:15px ', id:'upload_filepath', name:'file', allowBlank:false, fieldLabel:'选择文件', inputType:'file' //文件的形式 }) })
在需要完成提价功能的时候,可以这么调用uploadForm.getForm().submit();
这里需要指出的是,有一种做法会导致上传失败的:form依旧是如上的写法,只是里面没有url这一个属性,form是在发送ajax请求时调用的:
var uploadWin = new Ext.Window({ title:'上传文件', width:400, height:130, items:[uploadForm],//引入了上传文件的表单 buttonAlign :'center', buttons:[{ text:'上传', handler:uploadFile//调用函数完成提交动作 }] }); //导入证书函数function uploadFile(){
Ext.Ajax.request({ url: "AuthManager.do?action=addCertificate",
....})
}