首页 > 代码库 > struts2的单个文件上传

struts2的单个文件上传

本文主要两种方式,一:通过 FileUtils.copyFile(file, savefile);方法复制;二:通过字节流方式复制

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"     xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">        <!-- struts2 framework -->    <filter>        <filter-name>struts</filter-name>        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>    </filter>    <filter>        <filter-name>struts-cleanup</filter-name>        <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>    </filter>        <filter-mapping>        <filter-name>struts</filter-name>        <url-pattern>*.do</url-pattern>        <dispatcher>REQUEST</dispatcher>        <dispatcher>FORWARD</dispatcher>    </filter-mapping>    <filter-mapping>        <filter-name>struts-cleanup</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>          <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

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>     <include file="struts-default.xml" />        
<!--方法一 --> <package name="uploadFile" extends="struts-default"> <action name="upload" class="com.nn.upload.UploadAction" method="upload"> <result name="success">/success.jsp</result> <result name="input">/index.jsp</result> </action> </package> <!--方法二 --> <package name="uploadFile2" extends="struts-default"> <action name="upload2" class="com.nn.upload.UploadAction" method="uploadByStream"> <param name="allowTypes">.bmp,.png,.gif,.jpeg,.jpg</param> <param name="savePath">/upload</param> <!-- 保存的真实路径 --> <result name="success">/success.jsp</result> <result name="input">/index.jsp</result> </action> </package></struts>

struts.properties

struts.multipart.parser=jakartastruts.multipart.saveDir=/tempstruts.multipart.maxSize=2097152struts.i18n.encoding=utf-8struts.locale=zh_CNstruts.action.extension=dostruts.custom.i18n.resources=globalMsg

UploadAction.java 主要代码

public class UploadAction extends ActionSupport {    private File file;    private String  fileName;    private String fileType;    // 第二种方法中接受依赖注入的属性    private String savePath;    private String allowTypes;        /**     * 第一种方法,使用FileUtils从temp中复制到相关路径下面,结束后temp中的文件自动被清楚     * @return     */    public String upload() {                String realpath = ServletActionContext.getServletContext().getRealPath("/upload");        if (file != null) {            String name = this.getFileName().substring(1);            SimpleDateFormat  df = new SimpleDateFormat("yyyyMMddHHmmss");            this.setFileName(df.format(new Date())+name); //文件名字+日期            File savefile = new File(new File(realpath), this.getFileName());            if (!savefile.getParentFile().exists())                savefile.getParentFile().mkdirs();            try {                FileUtils.copyFile(file, savefile);            } catch (IOException e) {                e.printStackTrace();            }            ActionContext.getContext().put("message", "文件上传成功!");        }        return "success";    }        /**     * 第二站方式,通过字节流来复制     * @return      */    public String uploadByStream(){        // 判断是否允许上传          String filterResult = findFileType(this.getAllowTypes().split(","));          if (filterResult != null) {           ActionContext.getContext().put("typeError","您要上传的文件类型不正确");           return filterResult;          }                    // 以服务器的文件保存地址和原文件名建立上传文件输出流          FileOutputStream fos;          FileInputStream fis;          String realpath = ServletActionContext.getServletContext().getRealPath(this.getSavePath());        try {            String name = this.getFileName().substring(1);            SimpleDateFormat  df = new SimpleDateFormat("yyyyMMddHHmmss");            this.setFileName(df.format(new Date())+name); //文件名字+日期            realpath = realpath +"\\"+this.getFileName();            fos = new FileOutputStream(realpath);            fis = new FileInputStream(this.getFile());             byte[] buffer = new byte[1024];              int len = 0;              while ((len = fis.read(buffer)) > 0) {               fos.write(buffer, 0, len);              }              fos.close();              fis.close();              return SUCCESS;        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }            return INPUT;    }    public String findFileType(String[] types) {          String fileType = this.getFileType();          for (String type : types) {                            if (type.equals(fileType)) {                return null;              }          }          return INPUT;    }             //省略get set 方法}

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@taglib prefix="s" uri="/struts-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <script type="text/javascript">        function check(){            var file = document.getElementById("file");                if(file != null){                var fileType = file.value.substr(file.value.lastIndexOf(".")).toLowerCase(); //截取类型,如.jpg                var fileName = file.value.substr(file.value.lastIndexOf("\\")); //截取文件名字,如:/01.png                document.getElementById("fileName").value =http://www.mamicode.com/ fileName;                document.getElementById("fileType").value =http://www.mamicode.com/ fileType;                return true;            }                    alert("请选择文件");            return false;        }    </script>  </head>    <body>    <p>stuts 2 文件上传实例 </p>    ${requestScope.typeError}    <!-- 第一种方式上传链接:    <form action="/upload.do" method="post" enctype="multipart/form-data" onsubmit="return check();">     -->      <form action="/upload2.do" method="post" enctype="multipart/form-data" onsubmit="return check();">       上传文件:<input type="file" name="file" /><input type="submit"  value=http://www.mamicode.com/"上传"/>           <input type="hidden" name="fileType" id="fileType"/>          <input type="hidden" name="fileName" id="fileName"/>      </form>      </body></html>

success.jsp

 <body>      ${requestScope.message}<br>        文件名称:<input type="text" value=http://www.mamicode.com/"<s:property value=http://www.mamicode.com/"fileName"/>"/><br>            文件为:<img src=http://www.mamicode.com/"${pageContext.request.contextPath}/<s:property value=http://www.mamicode.com/"‘upload/+fileName"/>"><br>    <s:debug></s:debug>  </body>

 

源码下载地址:http://download.csdn.net/detail/u011518709/7896593

struts2的单个文件上传