第一种方法:传统的上传方式
在formpanal中增加一个fileUpload的属性,
Ext.onReady(function(){
var form = new Ext.form.FormPanel({
renderTo:'file',
labelAlign: 'right',
title: '文件上传',
labelWidth: 60,
frame:true,
url: '../UpLoadServlet',//fileUploadServlet
width: 300,
height:200,
fileUpload: true,
items: [{
xtype: 'textfield',
fieldLabel: '文件名',
name: 'file',
inputType: 'file'//文件类型
}],
buttons: [{
text: '上传',
handler: function() {
form.getForm().submit({
success: function(form, response){
Ext.Msg.alert('信息', response.result.msg);
},
failure: function(){
Ext.Msg.alert('错误', '文件上传失败');
}
});
}
}]
});
});
第二种方法:借助Ext.ux.UploadDialog.Dialog的组件,在编码时需要导入两个文件
<link rel="stylesheet" type="text/css" href="../../../js/extjs/UploadDialog/css/Ext.ux.UploadDialog.css" />
<script type="text/javascript" src="../../../js/extjs/UploadDialog/Ext.ux.UploadDialog.packed.js"></script>
组件的使用发放如下
var dialog = new Ext.ux.UploadDialog.Dialog({
autoCreate: true,
closable: true,
collapsible: false,
draggable: true,
minWidth: 400,
minHeight: 200,
width: 400,
height: 350,
permitted_extensions:['JPG','jpg','jpeg','JPEG','GIF','gif','xls','XLS'],
proxyDrag: true,
resizable: true,
constraintoviewport: true,
title: '文件上传',
url:'../UpLoadServlet',
reset_on_hide: false,
allow_close_on_upload: true ,
upload_autostart: false
});
//定义上传文件的按钮
var btnShow = new Ext.Button({
text:'上传文件',
listeners:{
click:function(btnThis,eventobj){
dialog.show();
}
}
});
在使用此方法进行文件上传时,其后台往页面的返回值类型是这样的:
{'success':true,'message':'上传成功'}
如果没有success:true,无论上传成功与否,显示的都是上传失败,其实这个和form.submit()的提交方式是一个道理。
后台就是最为普通的文件上传操作,还是附上代码吧,我用的是JspSmartUpload的上传组件,网上很多,建议下载个经过"汉化"的组件,因为官方的组件对于文件名为中文的上传不太支持,会出现乱码
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//往页面上传值
String mess="";
SmartUpload su = new SmartUpload();
try {
//初始化操作
su.initialize(this.getServletConfig(),request,response);
su.upload();
com.jspsmart.upload.File file = su.getFiles().getFile(0);
//获得上传的文件另存的路径
String uploadPath=request.getParameter("uploadPath");
//创建保存上传文件的文件夹
java.io.File f = new File(uploadPath) ;
if(!f.exists()){
f.mkdir();
}
file.saveAs(file.getFileName());
mess="{'success':true,'message':'上传成功'}";
}
catch(Exception e){
e.printStackTrace();
mess="{'success':true,'message':'上传失败'}";
}
PrintWriter pw=response.getWriter();
System.out.println(mess);
pw.println(mess);
pw.flush();
pw.close();
}
文件上传的后台代码与普通的JSP+JAVABEAN+SERVLET上传操作几乎没有改动,大家只需要把前台的上传功能做好就OK了
本人也是刚开始学习ExtJs,参看了很多的资料,最后附上官方的实例demo
http://dev.sencha.com/deploy/dev/examples/form/file-upload.html