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

时间: 2024-10-24 23:49:38

struts2的单个文件上传的相关文章

Struts2 单个文件上传/多文件上传

1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action="upload2.action" method="post" theme="simple" enctype="multipart/form-data"> <tr> <td id="more&quo

struts2中的文件上传和下载

天下大事,必做于细.天下难事,必作于易. 曾经见过某些人,基础的知识还不扎实就去学习更难的事,这样必然在学习新的知识会很迷惑结果 再回来重新学习一下没有搞懂的知识,这必然会导致学习效率的下降!我写的这篇上传和下载都很基础. 十分适合初学者! jsp:页面 <!--在进行文件上传时,表单提交方式一定要是post的方式,因为文件上传时二进制文件可能会很大,还有就是enctype属性,这个属性一定要写成multipart/form-data, 不然就会以二进制文本上传到服务器端--> <for

笨鸟先飞之Java(一)--使用struts2框架实现文件上传和下载

不管是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个常用功能会有很多种解决方式,但是struts2的框架却能给我们一个比较简单的方式,下面就一起来看吧: 文件上传: 首先来看实现上传功能的表单,Index.jsp: <span style="font-family:FangSong_GB2312;font-size:18px;"><%@ page language="java" contentType=&q

[转]Struts2多个文件上传

转载至:http://blog.csdn.net/hanxiaoshuang123/article/details/7342091 Struts2多个文件上传多个文件上传分为List集合和数组,下面我们着重介绍一下list集合的上传.都大同小异.一 介绍1. 在struts2文件上传的时候要先导入struts2的几个包,在struts2.3.1.2中,导入的包如图所视: 从图上可以看出其中文件上传所需要的是包为commons-fileupload-1.2.2.jar和commons-io-2.0

ajaxFileUpload+struts2实现多文件上传(动态添加文件上传框)

上篇文章http://blog.csdn.net/itmyhome1990/article/details/36396291介绍了ajaxfileupload实现多文件上传, 但只是固定的文件个数,如果需求不确定是多少文件 则我们就需要动态的添加文件上传框,以实现灵活性. 基于上篇基本框架是不变的,主要修改以下几个方面 1.jQuery实现动态添加删除文件上传框 2.获取文件上传框的ID 3.ajaxfileupload.js里将ID数组转换为需要的Object数组 依次解决上面问题 一.实现动

c# 单个文件上传至服务器

#region 单个文件上传至服务器 /// <summary> /// 单个文件上传至服务器 /// </summary> /// <param name="uriAddress">接收文件资源的URI, 例如: http://xxxx/Upload.aspx?UID=11111</param> /// <param name="filePath">要发送的资源文件, 例如: @"D:\work

Struts2 + uploadify 多文件上传完整实例!

首先我这里使用的是  Jquery  Uploadify3.2的版本  导入相关的CSS  JS    <link rel="stylesheet" type="text/css" href="<%=basePath%>css/uploadify/uploadify.css"> <script src="<%=basePath%>js/jquery.min.js"></sc

笨鸟先飞之Java(一)--使用struts2框架实现文件上传

无论是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个经常使用功能会有非常多种解决方案,可是struts2的框架却能给我们一个比較简单的方式,以下就一起来看吧: 文件上传: 首先来看实现上传功能的表单.Index.jsp: <span style="font-family:FangSong_GB2312;font-size:18px;"><%@ page language="java" contentType

springboot文件上传: 单个文件上传 和 多个文件上传

单个文件上传 //文件上传统一处理 @RequestMapping(value = "/upload",method=RequestMethod.POST) @ResponseBody public WangEditor uploadFile( @RequestParam("myFile") MultipartFile multipartFile, HttpServletRequest request) { try { /*// 获取项目路径 String real