
Struts2实现文件上传与下载的详细教程
下载需积分: 9 | 7.12MB |
更新于2025-05-01
| 188 浏览量 | 举报
收藏
Struts2作为Apache基金会下的一个开源Web应用框架,是Struts的更新版,广泛用于Java EE的MVC模型。在Web开发中,文件上传与下载是常见的功能需求,Struts2框架提供了简单且有效的方式来实现这些功能。本篇将详细解读Struts2框架下的文件上传和下载实例的知识点。
### Struts2文件上传
#### 文件上传流程
在Struts2框架中实现文件上传,需要遵循以下步骤:
1. 引入Struts2提供的文件上传支持库。通常在项目的`WEB-INF/lib`目录中添加`struts2-spring-plugin-x.x.x.jar`和`struts2-convention-plugin-x.x.x.jar`(版本号根据实际情况填写)。
2. 配置`struts.xml`文件。为了启用文件上传支持,需要在struts.xml文件中配置`<constant name="struts.multipart.enabled" value="true" />`,这个配置会告诉Struts2框架允许上传文件。
3. 创建上传表单。上传表单需要包含`enctype="multipart/form-data"`属性,确保表单数据以正确的格式传输。
4. 实现文件上传的Action类。创建一个Action类,该类中定义好文件接收的属性,并通过`@ multipart`注解修饰这些属性。
5. 在`struts.xml`中配置上传Action的映射。
#### 示例代码
下面是一个简单的文件上传示例:
**上传表单**
```html
<form action="" method="post" enctype="multipart/form-data">
选择文件: <input type="file" name="file" />
<input type="submit" value="上传" />
</form>
```
**Action类**
```java
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.FileManager;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
public class UploadAction extends ActionSupport {
private File file;
private String fileContentType;
private String fileFileName;
public boolean execute() {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
return false;
}
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> formItems = upload.parseRequest(request);
if (formItems != null && formItems.size() > 0) {
for (FileItem item : formItems) {
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
String filePath = "/uploadDir/";
File storeFile = new File(filePath + fileName);
file = storeFile;
fileContentType = item.getContentType();
fileFileName = item.getName();
IOUtils.copy(item.getInputStream(), new FileOutputStream(storeFile));
break;
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return true;
}
// Getter and setter methods
}
```
**struts.xml**
```xml
<action name="upload" class="com.example.UploadAction">
<result name="success">/success.jsp</result>
</action>
```
### Struts2文件下载
#### 文件下载流程
文件下载功能在Struts2框架中的实现步骤:
1. 创建下载文件的Action类,并在其中提供文件的字节数据。
2. 在`struts.xml`文件中配置下载Action的映射。
3. 处理请求的Action中,将文件以字节流的形式输出,并设置响应头(如Content-Type和Content-Disposition)来指示浏览器这是一个文件下载响应。
#### 示例代码
以下是一个简单的文件下载示例:
**Action类**
```java
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
public class DownloadAction extends ActionSupport {
private File file;
public String execute() throws IOException {
String fileName = request.getParameter("filename");
file = new File("/downloadDir/", fileName);
if (file.exists()) {
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.setContentType("application/octet-stream");
OutputStream output = response.getOutputStream();
FileInputStream fileInputStream = new FileInputStream(file);
IOUtils.copy(fileInputStream, output);
output.flush();
output.close();
fileInputStream.close();
} else {
return ERROR;
}
return SUCCESS;
}
}
```
**struts.xml**
```xml
<action name="download" class="com.example.DownloadAction">
<result name="success" type="stream">
<param name="inputName">fileInputStream</param>
<param name="contentType">application/octet-stream</param>
<param name="contentDisposition">attachment;filename=${filename}</param>
</result>
</action>
```
### 知识点总结
1. **Struts2的文件上传**,关键在于正确配置`struts.xml`文件中的`struts.multipart.enabled`属性,以及在上传表单中设置`enctype`属性为`multipart/form-data`。
2. **文件上传的Action类**,需要使用commons-fileupload包中的类来处理上传文件,并通过`@multipart`注解定义文件属性。
3. **文件下载的实现**,是在一个Action类中读取文件内容,并使用`response.getOutputStream()`输出文件流。
4. **配置文件下载**,则通过`struts.xml`中的`<result>`标签并指定`type="stream"`来完成,需设置正确的`inputName`、`contentType`和`contentDisposition`参数。
5. **异常处理**,在处理文件上传和下载的过程中,应仔细处理可能出现的异常,如文件不存在、读写错误等,并给出合适的错误提示。
6. **安全性考虑**,在实际开发中,文件上传与下载功能还需要考虑安全性问题,比如验证上传文件的类型、大小,以及防止文件名被注入等安全风险。
通过以上知识点,可以构建一个基于Struts2框架的文件上传和下载功能。这些功能不仅适用于简单的示例,同样适用于生产环境中复杂的应用场景。开发者在实际应用中需要结合具体业务需求进行相应的调整和优化。
相关推荐










mike_caoyong
- 粉丝: 78
最新资源
- MSP430F5438中英文资料下载速递
- 基于GIS的等时线分析方法及最佳路径算法研究
- VS2003环境下驱动编译教程详解
- jQuery表单验证实用教程:实例演示与下载
- C#界面皮肤源码深度解析及素材应用指南
- 北大青鸟S1工程MySchool系统与数据库解析
- 直接运行的银行家算法软件,界面友好
- 一键优化:最佳注册表清理工具深度清理系统
- 模拟操作系统中CPU进程调度策略实验
- myEclipse环境下Struts开发环境搭建指南
- C#实现编译原理中的词法分析器设计
- 解决Tomcat加载tcnative-1.dll文件问题
- VC6环境下的驱动编译教程解析
- 超级模块3.2源码真实带验证,杜绝假冒
- 全面掌握MTK技术:MTK入门与资料详解
- LPC2378外设资源全面例程解析
- 清华电机与拖动课程同步PPT讲解要点
- 深入分析BES服务的推送机制及其保障策略
- 揭秘Windows内存管理:深入理解系统核心原理
- C++初学者完美版课件及源码笔记
- jUEditor: 推荐一款实用的ubb编辑器
- 探索俄罗斯方块程序设计与算法流程
- PHP 5.2.3 Win32版安装包详解
- 掌握VC++ MFC:超级玛丽增强版源代码解析