在struts2中实现文件上传(以图片上传为例)

在struts2中实现(以图片上传为例)

1.FileUpload.jsp代码清单如下:

复制代码
Java代码  
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%@ taglib prefix="s" uri="/struts-tags" %>  
<html>  
  <head>  
    <title>The FileUplaodDemo In Struts2</title>  
  </head>  
    
  <body>  
    <s:form action="fileUpload.action" method="POST" enctype="multipart/form-data">  
        <s:file name="myFile" label="MyFile" ></s:file>  
        <s:textfield name="caption" label="Caption"></s:textfield>  
        <s:submit label="提交"></s:submit>  
    </s:form>  
  </body>  
</html>  
复制代码

 

2.ShowUpload.jsp的功能清单如下:

复制代码
Java代码  
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%@ taglib prefix="s" uri="/struts-tags" %>  
<html>  
  <head>  
    <title>ShowUpload</title>  
  </head>  
    
  <body>  
    <div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" >   
        <img src ='UploadImages/<s:property value ="imageFileName"/> '/>  
        <br />   
        <s:property value ="caption"/>   
    </div >   
  </body>  
</html>  
复制代码

3.FileUploadAction.java的代码清单如下 :

复制代码
Java代码  
package com.chris;  
  
import java.io.*;  
import java.util.Date;  
  
import org.apache.struts2.ServletActionContext;  
  
  
import com.opensymphony.xwork2.ActionSupport;  
  
public class FileUploadAction extends ActionSupport{  
  
     private static final long serialVersionUID = 572146812454l ;  
     private static final int BUFFER_SIZE = 16 * 1024 ;  
      
     //注意,文件上传时<s:file/>同时与myFile,myFileContentType,myFileFileName绑定  
     //所以同时要提供myFileContentType,myFileFileName的set方法  
       
     private File myFile;   //上传文件  
     private String contentType;//上传文件类型  
     private String fileName;   //上传文件名  
     private String imageFileName;  
     private String caption;//文件说明,与页面属性绑定  
      
     public void setMyFileContentType(String contentType)  {  
         System.out.println("contentType : " + contentType);  
         this .contentType = contentType;  
    }   
      
     public void setMyFileFileName(String fileName)  {  
         System.out.println("FileName : " + fileName);  
         this .fileName = fileName;  
    }   
          
     public void setMyFile(File myFile)  {  
         this .myFile = myFile;  
    }   
      
     public String getImageFileName()  {  
         return imageFileName;  
    }   
      
     public String getCaption()  {  
         return caption;  
    }   
   
      public void setCaption(String caption)  {  
         this .caption = caption;  
    }   
      
     private static void copy(File src, File dst)  {  
         try  {  
            InputStream in = null ;  
            OutputStream out = null ;  
             try  {                  
                in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);  
                out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);  
                 byte [] buffer = new byte [BUFFER_SIZE];  
                 while (in.read(buffer) > 0 )  {  
                    out.write(buffer);  
                }   
             } finally  {  
                 if ( null != in)  {  
                    in.close();  
                }   
                  if ( null != out)  {  
                    out.close();  
                }   
            }   
         } catch (Exception e)  {  
            e.printStackTrace();  
        }   
    }   
      
     private static String getExtention(String fileName)  {  
         int pos = fileName.lastIndexOf(".");  
         return fileName.substring(pos);  
    }   
   
    @Override  
     public String execute()      {          
        imageFileName = new Date().getTime() + getExtention(fileName);  
        File imageFile = new File(ServletActionContext.getServletContext().getRealPath("/UploadImages" ) + "/" + imageFileName);  
        copy(myFile, imageFile);  
         return SUCCESS;  
    }  
} 
复制代码

注:此时仅为方便实现Action所以继承ActionSupport,并Overrider execute()方法
  在struts2中任何一个POJO都可以作为Action

4.struts.xml清单如下:

复制代码
Java代码  
<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC  
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
    "http://struts.apache.org/dtds/struts-2.0.dtd">  
<struts>  
    <package name="example" namespace="/" extends="struts-default">  
        <action name="fileUpload" class="com.chris.FileUploadAction">  
        <interceptor-ref name="fileUploadStack"/>  
        <result>/ShowUpload.jsp</result>  
        </action>  
    </package>  
</struts>  
复制代码

5.web.xml清单如下:

复制代码
Java代码  
<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.4"   
    xmlns="http://java.sun.com/xml/ns/j2ee"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
    <filter >   
        <filter-name > struts-cleanup </filter-name >   
        <filter-class >   
            org.apache.struts2.dispatcher.ActionContextCleanUp  
        </filter-class >   
    </filter >   
     <filter-mapping >   
        <filter-name > struts-cleanup </filter-name >   
        <url-pattern > /* </url-pattern >   
    </filter-mapping >  
      
    <filter>  
        <filter-name>struts2</filter-name>  
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>struts2</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
  <welcome-file-list>  
    <welcome-file>Index.jsp</welcome-file>  
  </welcome-file-list>  
    
</web-app>  
复制代码

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2013-02-19 14:56  一直向北  阅读(253)  评论(0编辑  收藏  举报