extjs4,spring mvc3上传文件

本文讲解下extjs4结合spring mvc3的注解完成上传文件的例子。

1 页面文件
   <!-- Ext JS Files -->
<link rel="stylesheet" type="text/css" href="/extjs4-file-upload-spring/extjs/resources/css/ext-all.css" />
    <script type="text/javascript" src="/extjs4-file-upload-spring/extjs/bootstrap.js"></script>

<!-- file upload form -->
<script src="/extjs4-file-upload-spring/js/file-upload.js"></script>

</head>
<body>

Click on "Browse" button (image) to select a file and click on Upload button


<div id="fi-form" style="padding:25px;"></div>
</body>

2 EXTjs的文件
   Ext.onReady(function(){

    Ext.create('Ext.form.Panel', {
        title: 'File Uploader',
        width: 400,
        bodyPadding: 10,
        frame: true,
        renderTo: 'fi-form',   
        items: [{
            xtype: 'filefield',
            name: 'file',
            fieldLabel: 'File',
            labelWidth: 50,
            msgTarget: 'side',
            allowBlank: false,
            anchor: '100%',
            buttonText: 'Select a File...'
        }],

        buttons: [{
            text: 'Upload',
            handler: function() {
                var form = this.up('form').getForm();
                if(form.isValid()){
                    form.submit({
                        url: 'upload.action',
                        waitMsg: 'Uploading your file...',
                        success: function(fp, o) {
                            Ext.Msg.alert('Success', 'Your file has been uploaded.');
                        }
                    });
                }
            }
        }]
    });

});

3 上传文件的bean
   
Java代码 复制代码
  1. import org.springframework.web.multipart.commons.CommonsMultipartFile;   
  2.   
  3.   
  4. public class FileUploadBean {   
  5.   
  6.     private CommonsMultipartFile file;   
  7.   
  8.     public CommonsMultipartFile getFile() {   
  9.         return file;   
  10.     }   
  11.   
  12.     public void setFile(CommonsMultipartFile file) {   
  13.         this.file = file;   
  14.     }   
  15. }   
  16.   
  17.    


4 为了让extjs显示信息,再设计一个bean
Java代码 复制代码
  1. public class ExtJSFormResult {   
  2.   
  3.     private boolean success;   
  4.        
  5.     public boolean isSuccess() {   
  6.         return success;   
  7.     }   
  8.     public void setSuccess(boolean success) {   
  9.         this.success = success;   
  10.     }   
  11.        
  12.     public String toString(){   
  13.         return "{success:"+this.success+"}";   
  14.     }   
  15. }  

  这里其实是返回是否成功

5 controller层
  
Java代码 复制代码
  1. @Controller  
  2. @RequestMapping(value = "/upload.action")   
  3. public class FileUploadController {   
  4.   
  5.     @RequestMapping(method = RequestMethod.POST)   
  6.     public @ResponseBody String create(FileUploadBean uploadItem, BindingResult result){   
  7.   
  8.         ExtJSFormResult extjsFormResult = new ExtJSFormResult();   
  9.            
  10.         if (result.hasErrors()){   
  11.             for(ObjectError error : result.getAllErrors()){   
  12.                 System.err.println("Error: " + error.getCode() +  " - " + error.getDefaultMessage());   
  13.             }   
  14.                
  15.             //set extjs return - error   
  16.             extjsFormResult.setSuccess(false);   
  17.                
  18.             return extjsFormResult.toString();   
  19.         }   
  20.   
  21.         // Some type of file processing...   
  22.         System.err.println("-------------------------------------------");   
  23.         System.err.println("Test upload: " + uploadItem.getFile().getOriginalFilename());   
  24.         System.err.println("-------------------------------------------");   
  25.          if(uploadItem.getFile().getSize()>0){                      
  26.                 try {       
  27.                     SaveFileFromInputStream(uploadItem.getFile().getInputStream(),"D://",uploadItem.getFile().getOriginalFilename());       
  28.                 } catch (IOException e) {       
  29.                     System.out.println(e.getMessage());       
  30.                     return null;       
  31.                 }       
  32.             }       
  33.         //set extjs return - sucsess   
  34.         extjsFormResult.setSuccess(true);   
  35.            
  36.         return extjsFormResult.toString();   
  37.     }   
  38.        
  39.     /* **保存文件     
  40.       
  41.        * @param stream     
  42.        * @param path     
  43.        * @param filename     
  44.        * @throws IOException     
  45.        */      
  46.       public void SaveFileFromInputStream(InputStream stream,String path,String filename) throws IOException       
  47.       {             
  48.        FileOutputStream fs=new FileOutputStream(path + "/"+ filename);   
  49.        byte[]  buffer=new byte[1024*1024];   
  50.        int bytesum = 0;       
  51.           int byteread = 0;    
  52.             while ((byteread=stream.read())!=-1)   
  53.             {   
  54.                 bytesum+=byteread;   
  55.                    
  56.                   fs.write(buffer,0,byteread);       
  57.                   fs.flush();       
  58.                    
  59.             }   
  60.             fs.close();       
  61.             stream.close();       
  62.       }      

  可以看到,当出现错误时,extjsFormResult.setSuccess(false);

return extjsFormResult.toString();
  这两句返回给前端ext js处理。
  最后就是配置MVC了
 
Java代码 复制代码
  1. <!-- Activates various annotations to be detected in bean classes -->   
  2.     <context:annotation-config />   
  3.   
  4.     <!-- Scans the classpath of this application for @Components to deploy as beans -->   
  5.     <context:component-scan base-package="com.loiane"/>   
  6.   
  7.     <!-- Configures Spring MVC -->   
  8.     <import resource="mvc-config.xml"/>   
  9.   
  10.     <!-- Configure the multipart resolver -->   
  11.     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">   
  12.         <!-- one of the properties available; the maximum file size in bytes -->   
  13.         <property name="maxUploadSize" value="100000"/>   
  14.          
  15.     </bean>  

  设置文件大小限制

  一个很奇怪的问题是,在ie 7下,好象有点问题,待解决,但在firefox和chrome下都没问题,这个extjs 真怪,不用ext,普通的spring mvc是没问题的哦 

你可能感兴趣的:(extjs4,spring mvc3上传文件)