日期:2014-05-16  浏览次数:20506 次

ExtJs文件上传组件(UploadDialog)
第一种方法:传统的上传方式
在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
1 楼 xieweiting 2012-05-09  
我的不对啊,