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

时间:2023-11-22 16:38:38

Struts 框架 文件上传

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

    导jar包:

    aaarticlea/png;base64,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" alt="" />  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>

    实现效果:

aaarticlea/png;base64,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" alt="" />

aaarticlea/png;base64,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" alt="" />

    error.jsp  success.jsp略