Struts2 文件上传实战:从原理到代码实现
需积分: 9 12 浏览量
更新于2024-09-17
收藏 19KB DOCX 举报
"此资源提供了一个使用Struts2框架上传图片的简单示例,演示了如何在Java Web应用中处理文件上传功能。"
Struts2是一个流行的开源MVC框架,用于构建Java Web应用程序。在该框架中,实现文件上传功能通常涉及使用Apache Commons FileUpload库。这个示例展示了如何在Struts2环境中集成FileUpload,以便用户可以通过网页上传图片文件。
首先,我们需要在JSP页面(FileUpload.jsp)中创建一个表单,让用户选择要上传的文件。表单需要设置`enctype="multipart/form-data"`,这是处理文件上传所必需的属性。此外,`ContentEditable="false"`属性可以防止用户直接在文件输入字段内输入内容,确保只能通过浏览按钮选择文件。
```jsp
<form action="fileUpload" method="POST" enctype="multipart/form-data">
<input type="file" name="file" ContentEditable="false"/>
</form>
```
表单提交后,请求会被Struts2的Action处理。在这个示例中,Action类可能是这样的:
```java
package tutorial;
import java.io.*;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.FileUploadInterceptor;
public class FileUploadAction {
private File file;
private String fileContentType;
private String fileFileName;
public String execute() throws Exception {
// 获取上传文件的临时路径
String filePath = ServletActionContext.getServletContext().getRealPath("/") + "uploads/" + new Date().getTime() + "_" + fileFileName;
// 创建目标文件
File targetFile = new File(filePath);
// 将上传的文件移动到服务器指定目录
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(targetFile));
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bis.close();
bos.close();
return "success";
}
// getter 和 setter 略...
}
```
在这个Action类中,`execute()`方法处理上传请求。它首先获取文件的临时路径,然后创建一个新的文件对象以保存上传的图片。接下来,使用`BufferedInputStream`和`BufferedOutputStream`读取并写入文件内容,从而完成文件的移动。最后,Action返回一个表示成功的字符串,这通常会触发Struts2配置中定义的视图来显示结果。
为了使Struts2能够处理文件上传,还需要确保在配置文件(如struts.xml)中添加了`FileUploadInterceptor`拦截器,并将其应用于相应的Action配置:
```xml
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
<interceptor-stack name="myStack">
<interceptor-ref name="fileUpload"/>
<!-- 其他可能的拦截器 -->
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"/>
<action name="fileUpload" class="tutorial.FileUploadAction">
<result name="success">/FileUploadSuccess.jsp</result>
</action>
</package>
```
在这个配置中,`FileUploadInterceptor`被添加到自定义的拦截器栈中,`defaultStack`包含了Struts2的默认拦截器,确保了Action的正常执行。Action配置指定了文件上传成功后的结果页面。
这个示例提供了使用Struts2和Apache Commons FileUpload实现图片上传的基本步骤,包括前端表单的创建、后端Action的编写以及Struts2配置的设定。开发者可以根据实际需求扩展这个示例,例如添加错误处理、文件大小限制、文件类型检查等更复杂的功能。
2011-03-01 上传
2011-03-04 上传
2012-02-16 上传
2011-11-22 上传
2012-11-12 上传
2010-07-01 上传
2014-07-19 上传
2014-08-30 上传
2008-10-17 上传
pippo19892
- 粉丝: 11
- 资源: 19
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍