struts2文件上传下载(提供原代码)

开发上传下载必须注意的问题:

Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。

1.先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。接下来,<s:file/>标志将文件上传控件绑定到Action的myFile属性。

2.FileUploadAction中我分别写了setMyFileContentType、setMyFileFileName、setMyFile和setCaption四个Setter方法,后两者很容易明白,分别对应FileUpload.jsp中的<s:file/>和<s:textfield/>标志。但是前两者并没有显式地与任何的页面标志绑定,那么它们的值又是从何而来的呢?其实,<s:file/>标志不仅仅是绑定到myFile,还有myFileContentType(上传文件的MIME类型)和myFileFileName(上传文件的文件名,该文件名不包括文件的路径)。因此,<s:file name="xxx" />对应Action类里面的xxx、xxxContentType和xxxFileName三个属性。

3.struts2必须的jar文件如下:.classpath文件配置jar文件如下

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
 <classpathentry kind="src" path="src"/>
 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 <classpathentry kind="con" path="com.genuitec.eclipse.j2eedt.core.J2EE14_CONTAINER"/>
 <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/commons-logging-1.0.4.jar"/>
 <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/freemarker-2.3.8.jar"/>
 <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/ognl-2.6.11.jar"/>
 <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/commons-collections-2.0.jar"/>
 <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/commons-io-1.3.1.jar"/>
 <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/commons-fileupload-1.2.jar"/>
 <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/struts2-core-2.0.14.jar"/>
 <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/xwork-2.0.5.jar"/>
 <classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>
</classpath>

 

web.xml的配置:

<?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>struts2-cleanup</filter-name>
  <filter-class>
   org.apache.struts2.dispatcher.ActionContextCleanUp
  </filter-class>
 </filter>
 <filter-mapping>
  <filter-name>struts2-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>

 


在classpath中配置struts.xml文件内容如下:

<?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>
   
    <constant name="struts.multipart.saveDir" value="/tmp"/>
      <package name="fileupload" extends="struts-default">
          <action name="fileUpload" class="cn.com.unusap.spring.fileupload.FileUploadAction">
          <interceptor-ref name="fileUploadStack"></interceptor-ref>
             <result name="success">/Upload.jsp</result>
          </action>
      </package>
    </struts>
FileUploadAction内容如下:

package cn.com.unusap.spring.fileupload;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
/**
 * 关于文件上传
 * 1>File对应的表单中file名称其中影响的三个字段为file的表单名称为:xxx,xxxFileName,xxxContentType
 * 2>在struts.xml中action中添加上传下载的拦截器fileUploadStack同时必须classpath路径中添加commons-fileupload.jar,Commons-io.jar(注意必须对应相应的版本jar类包)
 * @author Administrator
 *
 */
public class FileUploadAction extends ActionSupport {
 org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest f;
 private static final int BUFFER_SIZE = 16 * 1024;
 private File imgFile;
 private String imgFileContentType;
 private String imgFileFileName;
 private String caption;

 public File getImgFile() {
  return imgFile;
 }

 public void setImgFile(File imgFile) {
  this.imgFile = imgFile;
 }

 public String getImgFileContentType() {
  return imgFileContentType;
 }

 public void setImgFileContentType(String imgFileContentType) {
  this.imgFileContentType = imgFileContentType;
 }

 

 public String getImgFileFileName() {
  return imgFileFileName;
 }

 public void setImgFileFileName(String imgFileFileName) {
  this.imgFileFileName = imgFileFileName;
 }

 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() {
  this.imgFileFileName = new Date().getTime()
    + getExtention(this.imgFileFileName);
  File imageFile = new File(ServletActionContext.getServletContext()
    .getRealPath("/UploadImages")
    + "/" + this.imgFileFileName);
  copy(this.imgFile, imageFile);
  return SUCCESS;
 }

}

 

你可能感兴趣的:(apache,Ajax,Web,xml,struts)