详解Ext + Struts2 文件上传
前阵子项目里面需要实现文件上传的功能,前后换了包括我在内的三个人来搞,搞了很长时间才搞好,因为一些小问题耽误了很长时间。趁着手热,写下来贴出来给大家分享,希望查到本文的人可以少走一些弯路。
项目中用到的技术是ExtJs3.3和SSH等,与文件上传相关的主要是Ext和Struts2。
最开始是一同事搞的,使用了Ext示例包里的FileUploadField,需要在页面中引用两个文件:/ext/examples/ux/fileuploadfield/css/fileuploadfield.css和/ext/examples/ux/fileuploadfield/FileUploadField.js。
废话少说,直接上代码,中间各种曲折的过程都省略。文件上传的弹框是一个Window,里面内嵌了一个FormPanel。
var fp = new Ext.FormPanel( { renderTo : Ext.getBody(), fileUpload : true, width : 523, frame : true, autoHeight : true, bodyStyle : 'padding: 10px 10px 0 10px;', labelWidth : 50, defaults : { anchor : '95%', allowBlank : false, msgTarget : 'side' }, items : [ new Ext.form.FileUploadField( { buttonText: '浏览...', emptyText: '请选择一个xls文件', name : 'xlsFile', width : 500, buttonCfg: { width: 40, iconCls: 'upload-icon' } }) ], buttons : [ { text : '上传', handler : function() { if (fp.getForm().isValid()) { fp.getForm().submit( { method : 'post', url :'uploadEmployee.action',// 后台处理的action waitMsg : '操作处理中,请稍等...', waitTitle:'提示', success :function(fp,action){ Ext.Msg.alert('Success', 'The value of success is: "'+action.result.success+'" on the server'); excelWindow.destroy(); }, failure : function(fp, action) { var msg = action.response.responseText; var obj = Ext.decode( msg ); Ext.Msg.alert("提示", "Sorry,操作失败,原因:" + obj.message); excelWindow.destroy(); } }); } } }]}); var excelWindow = new Ext.Window( { renderTo : Ext.getBody(), closeAction : "hide", plain : true, width : 540, title : "批量导入员工信息", modal : true, items:[fp] });excelWindow.show();<action name="uploadEmployee" type="json"> <param name="contentType">text/html</param> </result> <result name="test1">/employee/jsp/test.jsp <param name="contentType">text/html</param> </result></action>
privatevoid sendMsg(String content) throws IOException{ HttpServletResponse response = ServletActionContext.getResponse(); response.setCharacterEncoding("utf-8"); response.setContentType("text/html"); response.getWriter().write(content); response.getWriter().flush(); response.getWriter().notify();}var t = response.responseText;if(t.charAt(0)=="{"){ if( Ext.decode(t).xlsFileFileName ){ return; }} 1 楼 _魔妃 2012-06-18 我这EXTJS不是3.3的版本,对文件上传会有影响么?