Struts2默认采用Jakarta的Common-FileUpload文件上传框架,因此我们需要在应用中添加两个jar包:commons-io-1.4.jar和commons-fileupload-1.2.1.jar。
假设文件上传页面为:
<s:form action="upload.action" method="post" enctype="multipart/form-data">
<s:textfield label="文件标题" name="title"/>
<s:file label="选择文件" name="upload"></s:file>
<s:submit value="上传"/>
</s:form>
在Action中,我们需要3个属性来封装文件域的信息:
- 类型为File的xxx属性,封装该文件域对应的文件内容。
- 类型为String的xxxFileName属性,封装文件域对应文件的文件名。
- 类型为String的xxxContentType属性,封装了该文件域对应文件的文件类型。
UploadAction代码如下:
package com.test.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {
//封装文件标题请求参数的属性
private String title;
//封装上传文件域的属性
private File upload;
//封装上传文件类型的属性
private String uploadContentType;
//封装上传文件名的属性
private String uploadFileName;
//接受依赖注入的属性,文件保存路径
private String savePath;
//允许上传的文件类型
// private String allowTypes;
@Override
public String execute() throws Exception {
//先判断文件上传类型
// String filterResult = filterType(getAllowTypes().split(","));
// if(filterResult != null){
// ActionContext.getContext().put("typeError","您要上传的文件类型不正确");
// return filterResult; //filterResult此时等于input
// }
if(getUpload() == null) {
ActionContext.getContext().put("typeError","您要上传的文件类型不正确");
return INPUT;
}
//以服务器的文件保存地址savePath和原文件名建立上传文件输出流
FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + getUploadFileName());
//以上传文件建立一个文件上传流
FileInputStream fis = new FileInputStream(getUpload());
//将上传文件的内容写入服务器
byte[] buffer = new byte[1024];
int len = 0;
while((len = fis.read(buffer)) > 0) {
fos.write(buffer,0,len);
}
// TODO Auto-generated method stub
return SUCCESS;
}
// public String getAllowTypes() {
// return allowTypes;
// }
//
// public void setAllowTypes(String allowTypes) {
// this.allowTypes = allowTypes;
// }
public String getSavePath() throws Exception {
//获取上传路径
return ServletActionContext.getRequest().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
/**
* 过滤文件类型
* @param types 系统所有允许上传的文件类型
* @return 如果上传文件的类型符合要求,返回null,否则返回input字符串
*/
public String filterType(String[] types) {
//得到上传文件的类型
String fileType = getUploadContentType();
//遍历允许上传的文件类型,并判断是否允许上传
for(String type : types) {
if(type.equals(fileType))
return null;
}
return INPUT;
}
}
然后在struts.xml文件中进行配置:
<action name="upload" class="com.test.action.UploadAction">
<!-- 配置fileUpload的拦截器 -->
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
<param name="maximumSize">102400</param>
</interceptor-ref>
<!-- 如果需要使用文件上传拦截器来过滤文件大小或者过滤文件内容,则必须显式配置引用Struts默认拦截器栈 -->
<interceptor-ref name="defaultStack"/>
<param name="savePath">/upload</param>
<!--
<param name="allowTypes">image/bmp,image/png,image/gif,image/jpeg</param>
-->
<result>success.jsp</result>
<result name="input">upload.jsp</result>
</action>
分享到:
相关推荐
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。
Struts2对这些库进行了封装,使得文件上传的代码更加简洁,同时减少了不同上传任务之间的编程差异。 在进行文件上传时,HTML表单需要设置`enctype="multipart/form-data"`,这是为了指示浏览器以二进制流的形式发送...
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
在使用Struts2进行文件上传时,需要依赖两个关键的第三方库:`commons-fileupload-1.2.1.jar` 和 `commons-io-1.4.jar`。这两个库在文件上传过程中扮演着至关重要的角色。 首先,`commons-fileupload-1.2.1.jar` 是...
本项目实现了使用Struts2进行文件批量上传的功能,这涉及到几个关键的技术点,包括文件上传组件的选择、前端表单设计、后端处理逻辑以及存储策略。 1. **文件上传组件**:在Struts2中,我们通常使用`Commons ...
结合Struts2,一个流行的Java Web框架,可以构建出高效、用户友好的文件上传功能。下面将详细介绍如何利用SWFUpload与Struts2来实现多文件上传。 **一、SWFUpload组件介绍** SWFUpload 是一个JavaScript库,它利用...
2. **添加Struts2插件**:Struts2的文件上传功能依赖于`struts2-convention-plugin`和`struts2-core`等库。在`struts.xml`配置文件中,需要启用Multipart解析器,例如添加`<constant name="struts.multipart.parser...
在这个“struts2上传文件源代码”中,我们将深入探讨Struts2如何实现文件上传功能,以及涉及到的相关知识点。 首先,文件上传是Web应用中常见的功能,它允许用户从本地计算机选择文件并将其发送到服务器。在Struts2...
2.能够对上传路径进行配置文件指定(upload.properties),使用了一些类似单例模式的静态代码块 3.Struts2进行下载处理,能对上传的所有文件进行下载(多个) 4.文件保存的名称UUID生成,不过显示并下载的名称都是原...
在“struts2文件上传例子.rar”这个项目中,开发者已经使用Struts2.0框架实现了一个简单的文件上传功能。MyEclipse 6.6是一个集成开发环境,支持Java EE项目开发,可以直接导入该项目进行运行和调试。 首先,我们...
为了支持文件上传,我们需要创建一个继承自`org.apache.struts2.dispatcher.multipart.MultiPartRequest`的Action类,或者使用Struts2提供的`org.apache.struts2.views.util.DefaultMultiPartRequest`。这个类可以...
Struts2是一个强大的MVC框架,广泛应用于Java Web开发中,尤其在处理用户表单提交和文件上传等交互场景中表现出色。在这个“Struts2实现文件上传”的主题中,我们将深入探讨如何利用Struts2框架来实现在Web应用中的...
Struts2 文件上传是Web开发中的一个重要功能,它允许用户从他们的本地计算机向服务器传输文件。在Struts2框架中,文件上传是通过特定的拦截器实现的,这些拦截器处理了文件上传请求并提供了安全性和大小限制。下面将...
在本文中,我们将深入探讨使用Struts2实现文件上传和下载的各种方案。 ### 文件上传方案 #### 1. 使用Struts2进行文件普通上传 文件上传的核心是处理`multipart/form-data`类型的表单数据。Struts2通过`Struts2-...
Struts2框架是Java Web开发中的一个流行MVC(Model-View-Controller)框架,它提供了丰富的功能,包括处理表单提交、文件上传等。在Struts2中,文件上传是一个常见的需求,可以帮助用户从客户端上传文件到服务器。...
2. **上传组件**:Struts2使用Apache Commons FileUpload库来处理文件上传。这个库负责解析请求中的多部分数据,将文件内容分离出来。`commons-fileupload.jar` 是这个库的实现,它包含了处理文件上传的基本类和接口...
在使用Struts2进行文件上传前,需要在struts.xml配置文件中添加对应的拦截器,例如`params`和`fileUpload`拦截器,确保文件数据能够正确地被解析。 3. **Action类处理**: 创建一个Action类,用于接收上传的文件...
Struts2上传文件(直接用request)
1. **.struts2配置**:在Struts2框架中,需要在`struts.xml`配置文件中添加相应的action配置,声明文件上传的处理方法。通常,你需要设置`<result>`类型为`stream`,以便处理上传的文件。 2. **Action类**:创建一...
对于更复杂的需求,可以利用Struts2的拦截器和插件来扩展功能,或者考虑使用其他专门处理文件上传的库,如Spring MVC的`MultipartFile`。理解源码有助于你更好地掌握Struts2的工作原理,从而在遇到问题时能更高效地...