Struts2框架文件上传下载详解
167 浏览量
更新于2024-08-29
收藏 63KB PDF 举报
"这篇文档主要讨论了在Java框架Struts2中如何实现文件上传和下载功能。Struts2提供了一种内置机制来处理基于HTML表单的文件上传,上传后的文件通常会被暂时存储在服务器的一个特定目录中,等待Action类进行进一步处理或移动到安全的位置。同时,由于服务器的安全策略,可能不允许直接写入除临时目录和Web应用目录之外的其他地方。文件上传在Struts2中是通过预定义的拦截器`org.apache.struts2.interceptor.FileUploadInterceptor`来实现的,该拦截器是defaultStack的一部分,允许在`struts.xml`配置文件中设置不同的参数以定制上传行为。"
在Struts2中实现文件上传的步骤主要包括以下几点:
1. HTML表单设置:创建一个包含`enctype="multipart/form-data"`属性的HTML表单,以便支持文件上传。例如:
```html
<form action="upload.action" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
```
2. 配置拦截器:在`struts.xml`配置文件中,确保`FileUploadInterceptor`拦截器已经添加到了Action的配置中。默认情况下,`struts-default`包已经包含了这个拦截器,但如果你需要自定义设置,可以这样配置:
```xml
<action name="upload" class="com.example.UploadAction">
<interceptor-ref name="defaultStack"/>
<!-- 如果需要自定义配置,可以替换默认的FileUploadInterceptor -->
<!--<interceptor-ref name="fileUpload">
<param name="maximumSize">1048576</param>
<param name="allowedTypes">image/jpeg,image/png</param>
</interceptor-ref>-->
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
```
这里的`<param>`标签可以用来设置最大文件大小、允许的文件类型等。
3. Action类处理:在Action类中,使用`ServletFileUpload`和`FileItem`接口来处理上传的文件。例如:
```java
public class UploadAction extends ActionSupport {
private File file;
private String fileName;
private String contentType;
// getters and setters...
public String execute() {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> items = upload.parseRequest(getServletActionContext().getRequest());
for (FileItem item : items) {
if (!item.isFormField()) {
file = item.getFile();
fileName = item.getName();
contentType = item.getContentType();
// 这里可以处理文件,如保存到服务器指定目录
}
}
} catch (Exception e) {
// 处理异常
}
return SUCCESS;
}
}
```
对于文件下载,Struts2也提供了一种简单的方法。你可以创建一个Action,从服务器读取文件并将其作为响应流返回给客户端。以下是一个简单的下载Action示例:
```java
public class DownloadAction extends ActionSupport {
private File file;
private String fileName;
// getters and setters...
public InputStream getInputStream() throws Exception {
return new FileInputStream(file);
}
public String getFileName() {
return fileName;
}
public String execute() {
// 这里根据需要获取要下载的文件
file = new File("/path/to/download/file");
fileName = "downloadedFile.txt";
return SUCCESS;
}
}
```
然后在`struts.xml`中配置Action,并设置结果类型为stream,例如:
```xml
<action name="download" class="com.example.DownloadAction">
<result type="stream">
<param name="contentType">application/octet-stream</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="bufferSize">1024</param>
</result>
</action>
```
这样,当用户访问`download.action`时,就会触发下载操作,浏览器将以附件的形式下载指定的文件。
Struts2框架为开发者提供了方便的文件上传和下载功能,通过预定义的拦截器和Action类的处理,能够有效地管理文件操作,提高了开发效率和安全性。在实际应用中,需要注意文件存储路径的安全性,防止恶意文件上传,以及对上传和下载文件的大小、类型进行有效控制,以确保系统的稳定性和安全性。
2010-03-16 上传
2009-02-07 上传
2022-09-23 上传
2008-05-16 上传
2019-03-28 上传
2024-07-19 上传
点击了解资源详情
点击了解资源详情
2016-01-29 上传
weixin_38681301
- 粉丝: 5
- 资源: 921
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析