zoukankan      html  css  js  c++  java
  • 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=jakarta
    struts.multipart.saveDir=/temp
    struts.multipart.maxSize=2097152
    struts.i18n.encoding=utf-8
    struts.locale=zh_CN
    struts.action.extension=do
    struts.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 = fileName;
                    document.getElementById("fileType").value = 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="上传"/>
               <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="<s:property value="fileName"/>"/><br>   
             文件为:<img src="${pageContext.request.contextPath}/<s:property value="'upload/'+fileName"/>"><br>
        <s:debug></s:debug>
      </body>

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

  • 相关阅读:
    数据库之完整性约束
    数据库之数据类型
    数据库之表操作,数据操作
    mysql数据库之基本操作和存储引擎
    MySQL数据库之安装
    并发编程之socketserver模块
    python并发编程之IO模型
    [BZOJ 3207] 花神的嘲讽计划Ⅰ【Hash + 可持久化线段树】
    [BZOJ 1046] [HAOI2007] 上升序列 【DP】
    [BZOJ 1816] [Cqoi2010] 扑克牌 【二分答案】
  • 原文地址:https://www.cnblogs.com/estellez/p/3966434.html
Copyright © 2011-2022 走看看