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-10-11 17:46:38

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

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

基于Java的一个简单的文件上传下载功能

最近在公司给客户端做接口,有一个图片上传和文件下载的功能,本来想用Struts来做文件上传下载,但是看了下公司好像没有这个配置,然后看了下同事的代码,才发现原来Apache也可以简单的实现文件上传下载. 首先引入commons-io-2.2.jar FileUtils为我们提供了很多对文件的操作的方法,比如上传整个文件夹的文件.上传单个文件等 然后请看代码下载: public static void uploadFile(String targetDirectory,String targetF

JavaWeb 文件上传下载

1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下载功能实现的. 文件上传下载实际上是两步操作,第一是文件上传,就是将本地文件上传到服务器端,实现文件多用户之间的共享,第二是文件下载,就是将服务器端的文件下载到本地磁盘. 1.2. 文件上传下载实现原理 首先,需要知道文件是如何实现上传及下载的.文件上传及下载实现原理如下: 文件上传实现流程如下:

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

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

ssh框架文件上传下载

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Author" content="BuNuo"> <meta name="Keywords" content="文件上传下载"> <meta name="

SSM框架-SpringMVC 实例文件上传下载

SSM框架-SpringMVC 实例文件上传下载 2017-04-17 09:38 4497人阅读 评论(6) 收藏 举报  分类: java基础(3)  目录(?)[+] 目录(?)[+] 林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程免费下载 一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload

Struts2学习之文件上传/下载&amp;ValueStack(三)

简介 今天是学习Struts2第三天,也算struts2准备前奏告一段落,提升部分只能在后期深入了解,多看源码,多参阅资料.今天所学的知识点文件上传.下载/ValueStack&OGNL/Struts2标签 文件上传/下载 文件上传简介 a). 企业常用文件上传技术 : jspSmartUpload(主要应用 JSP model1 时代) . fileupload (Apache commons项目中一个组件). Servlet3.0 集成文件上传 Part类 b). Struts2 对文件上传

文件上传(多文件上传)/下载

通常我们会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就文件下载和多文件上传的源代码进行一下讲 文件上传 首先先创建jsp页面(用于多文件上传) <%@ page language="java" import="java.util.

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

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