Struts 框架 之 文件上传下载案例

Struts 框架 文件上传

  1. 先准备 Struts 环境 (我使用的是struts 2.3.4版本)

    导jar包:

      jar包的具体作用在前面的文章有讲。

    

    配置 web.xml

    <!-- Struts核心拦截器 -->
    <filter>
        <filter-name>Struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    然后开始开发action 

    上传action类:FileUpload  src/com.yif.fileupload

    jsp : <input type="file" name="file1">

    action类中使用  File file1 和 jsp中名字要相同

    file1FileName  file1ContentType 中的file1 需要与jsp中对应

import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class FileUpload extends ActionSupport {

    // 对应表单:<input type="file" name="file1">
    private File file1;
    // 文件名
    private String file1FileName;
    // 文件的类型(MIME)
    private String file1ContentType;

    public void setFile1(File file1) {
        this.file1 = file1;
    }

    public void setFile1FileName(String file1FileName) {
        this.file1FileName = file1FileName;
    }

    public void setFile1ContentType(String file1ContentType) {
        this.file1ContentType = file1ContentType;
    }

    @Override
    public String execute() throws Exception {
        /****** 拿到上传的文件,进行处理 ******/
        // 把文件上传到upload目录

        // 获取上传的目录路径
        String path = ServletActionContext.getServletContext().getRealPath(
                "/upload");
        // 创建目标文件对象
        File destFile = new File(path, file1FileName);
        // 把上传的文件,拷贝到目标文件中
        FileUtils.copyFile(file1, destFile);

        return SUCCESS;
    }
}

 

    开发下载文件 action类: DownAction  src/com.yif.fileupload

    list方法 将上传文件的路径下的文件 放在list中写道请求中。

package com.yif.fileupload;

import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class DownAction extends ActionSupport {

    /*************1. 显示所有要下载文件的列表*********************/
    public String list() throws Exception {
        //得到upload目录路径
        String path = ServletActionContext.getServletContext().getRealPath("/upload");
        // 目录对象
        File file  = new File(path);
        // 得到所有要下载的文件的文件名
        String[] fileNames =  file.list();
        // 保存
        ActionContext ac = ActionContext.getContext();
        // 得到代表request的map (第二种方式)
        Map<String,Object> request= (Map<String, Object>) ac.get("request");
        request.put("fileNames", fileNames);
        return "list";
    }

    /*************2. 文件下载*********************/
    private String fileName;
    public void setFileName(String fileName) {
        // 处理传入的参数中问题(get提交)
        try {
            fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
        // 把处理好的文件名,赋值
        this.fileName = fileName;
    }

    //2. 下载提交的业务方法 (在struts.xml中配置返回stream)
    public String down() throws Exception {
        return "download";
    }

    // 3. 返回文件流的方法
    public InputStream getAttrInputStream(){
        return ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName);
    }

    // 4. 下载显示的文件名(浏览器显示的文件名)
    public String getDownFileName() {
        // 需要进行中文编码
        try {
            fileName = URLEncoder.encode(fileName, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
        return fileName;
    }

}

 

    写upload.xml    src/com.yif.fileupload

    下载配置详细:

 

    <result name="download" type="stream">
                <!-- 运行下载的文件的类型:指定为所有的二进制文件类型 -->
                <param name="contentType">application/octet-stream</param>
                <!-- 对应的是Action中属性: 返回流的属性【其实就是getAttrInputStream()】 -->
                <param name="inputName">attrInputStream</param>
                <!-- 下载头,包括:浏览器显示的文件名 -->
                <param name="contentDisposition">attachment;filename=${downFileName}</param>
                <!-- 缓冲区大小设置 -->
                <param name="bufferSize">1024</param>
    </result>

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="upload_" extends="struts-default">
        <!-- 注意: action 的名称不能用关键字"fileUpload" -->
        <action name="fileUploadAction" class="com.yif.fileupload.FileUpload">
            <!-- 限制运行上传的文件的类型 -->
            <interceptor-ref name="defaultStack">
                <!-- 限制运行的文件的扩展名 -->
                <param name="fileUpload.allowedExtensions">txt,jpg,jar</param>
                <!-- 限制运行的类型 【与上面同时使用,取交集】 <param name="fileUpload.allowedTypes">text/plain</param> -->
            </interceptor-ref>
            <result name="success">/e/success.jsp</result>
            <!-- 配置错误视图 -->
            <result name="input">/e/error.jsp</result>
        </action>
        <action name="down_*" class="com.yif.fileupload.DownAction"
            method="{1}">
            <!-- 列表展示 -->
            <result name="list">/e/list.jsp</result>
            <!-- 下载操作 -->
            <result name="download" type="stream">
                <!-- 运行下载的文件的类型:指定为所有的二进制文件类型 -->
                <param name="contentType">application/octet-stream</param>
                <!-- 对应的是Action中属性: 返回流的属性【其实就是getAttrInputStream()】 -->
                <param name="inputName">attrInputStream</param>

                <!-- 下载头,包括:浏览器显示的文件名 -->
                <param name="contentDisposition">attachment;filename=${downFileName}</param>
                <!-- 缓冲区大小设置 -->
                <param name="bufferSize">1024</param>
            </result>
        </action>
    </package>
</struts>

 

    配置struts.xml  src/struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <include file="com/yif/fileupload/upload.xml"></include>
</struts>

 

    upload.jsp页面(前端采用Bootstrap框架)   WebRoot/e/upload.jsp

<body style="background-color:#ccc;padding:50px;">
    <div class="container" style="background-color:#fff;padding:50px;">
        <form class="form-horizontal"
            action="${pageContext.request.contextPath }/fileUploadAction"
            method="post" enctype="multipart/form-data">
            <h1 class="page-header">文件上传</h1>

            <div class="form-group">
                <label for="name" class="col-sm-2 control-label">用户名:</label>
                <div class="col-sm-5">
                    <input type="text" id="name" class="form-control" placeholder="用户名"
                        name="userName">
                </div>
            </div>

            <div class="form-group">
                <label class="col-sm-2 control-label">文件:</label>
                <div class="col-sm-10">
                    <input type="file" name="file1">
                </div>
            </div>

            <div class="form-group">
                <div class="col-sm-2 col-sm-offset-2">
                    <input type="submit" class="btn btn-lg btn-primary btn-block"
                        value="上传"></input>
                </div>
            </div>
        </form>
    </div>
</body>

 

    list.jsp页面                WebRoot/e/list.jsp

<body style="background-color:#ccc;padding:50px;">
    <h1 class="page-header">下载列表</h1>
    <table class="table table-hover">
        <tr>
            <td class="active">编号</td>
            <td class="success">文件名</td>
            <td class="warning">操作</td>
        </tr>
        <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
        <c:forEach var="fileName" items="${fileNames}" varStatus="vs">
            <tr>
                <td>${vs.count }</td>
                <td>${fileName }</td>
                <td>
                    <!-- 构建一个url --> <c:url var="url" value="down_down">
                        <c:param name="fileName" value="${fileName}"></c:param>
                    </c:url> <a href="${url }">下载</a></td>
            </tr>
        </c:forEach>
    </table>
</body>

 

    实现效果:

    error.jsp  success.jsp略

时间: 2024-09-20 00:04:43

Struts 框架 之 文件上传下载案例的相关文章

Struts+Spring+Hibernate实现上传下载

上传|下载 引言 文件的上传和下载在J2EE编程已经是一个非常古老的话题了,也许您马上就能掰着指头数出好几个著名的大件:如SmartUpload.Apache的FileUpload.但如果您的项目是构建在Struts+Spring+Hibernate(以下称SSH)框架上的,这些大件就显得笨重而沧桑了,SSH提供了一个简捷方便的文件上传下载的方案,我们只需要通过一些配置并辅以少量的代码就可以完好解决这个问题了. 本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序.SS

JavaWeb中struts2实现文件上传下载功能实例解析_java

在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的源代码进行一下讲解,这里需要导入文件下载上传的两个jar文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.

JavaEE中struts2实现文件上传下载功能实例解析_java

本文实例为大家分享了struts2实现文件上传下载的具体实现代码,供大家参考,具体内容如下 一.文件上传 struts提交的文件组件上传, 前台: 1).提交方式POST 2).表单类型 multipart/form-data 3).input type=file 后台: Apache提供的FileUpload组件 核心类: FileItemFactory FileItem的工厂 ServletFileUpload servlet 中的文件上传的核心类 FileItem 封装了上传的表单文件项的

ASP.NET中常用的文件上传下载方法

asp.net|上传|下载     文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括:1.如何解决文件上传大小的限制2.以文件形式保存到服务器3.转换成二进制字节流保存到数据库以及下载方法4.上传Internet上的资源 第一部分:    首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文件来自定义最大文件大小,如下:<

利用ssh实现服务器文件上传下载_java

通过ssh实现服务器文件上传下载 写在前面的话 之前记录过一篇使用apache的FTP开源组件实现服务器文件上传下载的方法,但是后来发现在删除的时候会有些权限问题,导致无法删除服务器上的文件.虽然在Windows上使用FileZilla Server设置读写权限后没问题,但是在服务器端还是有些不好用. 因为自己需要实现资源管理功能,除了单文件的FastDFS存储之外,一些特定资源的存储还是打算暂时存放服务器上,项目组同事说后面不会专门在服务器上开FTP服务,于是改成了sftp方式进行操作. 这个

安卓文件上传下载-我是安卓开发学了一点,大家可以给我讲讲如何写一个上传下载的功能

问题描述 我是安卓开发学了一点,大家可以给我讲讲如何写一个上传下载的功能 安卓我是0基础,现在我们老师命令我写一个文件上传下载,可是我只看了那么一点,大家可以给我讲讲思路,自己实际案例 解决方案 首先看看你们老师的要求是上传下载到哪里?然后再搜索方法案例,因为数据存储有多种方式都不一样的 解决方案二: http://download.csdn.net/detail/airlke/8172213

使用jQuery.form.js/springmvc框架实现文件上传功能_jquery

使用的技术有jquery.form.js框架, 以及springmvc框架.主要实现异步文件上传的同时封装对象,以及一些注意事项. 功能本身是很简单的,但是涉及到一些传递参数类型的问题.例如:jquery的ajax方法与jquery.form.js中的ajaxSubmit方法的参数,具体细节将在下一篇博客中分享. 重点: html表格三要素: action="fileUpload/fileUpload" method="post" enctype="mul

Bootstrap自定义文件上传下载样式_javascript技巧

在平时工作中,文件上传下载功能属于不可或缺的一部分.bootstrap前端样式框架也使用的比较多,现在根据bootstrap强大的样式模板,自定义一种文件下载的样式. 后续会使用spring MVC框架实现文件上传的全部代码,敬请期待. 先看图片示例: 本示例包括下载样本文件样式和上传文件样式. 直接先上代码,最后讲解: <div class="form-group col-md-12 has-feedback" id="file"> <label

jquery.form.js框架实现文件上传功能案例解析(springmvc)_jquery

上一篇 Bootstrap自定义文件上传下载样式(http://www.jb51.net/article/85156.htm)已经有一段时间了,一直在考虑怎么样给大家提交一篇完美的逻辑处理功能.现在我结合自己的实际工作给大家分享一下. 使用的技术有jquery.form.js框架, 以及springmvc框架.主要实现异步文件上传的同时封装对象,以及一些注意事项. 功能本身是很简单的,但是涉及到一些传递参数类型的问题.例如:jquery的ajax方法与jquery.form.js中的ajaxSu