Struts 2 - 文件上传
参考文章:
http://www.dzone.com/tutorials/java/struts-2/struts-2-example/struts-2-file-upload-example-1.html
拦截器(Interceptor):FileUploadInterceptor
通过拦截器的设置,我们可以定义
1.上传文件的类型(allowedTypes)
2.上传文件的扩展名(allowedExtensions)
3.上传文件的最大限制(maximumSize)bytes
<interceptor-ref name="fileUpload"> <param name="maximumSize"> 10240 </param> <param name="allowedTypes"> image/png,image/gif,image/jpeg </param> <param name="allowedExtensions"> .png,.gif,.jpeg </param> </interceptor-ref>
Demo:
1. index.jsp - 创建file upload file form
<!-- ignore codes --> <s:form action="fileUpload" method="post" enctype="multipart/form-data"> <s:file name="image" label="User Image"></s:file> <s:submit value="Upload"></s:submit> </s:form> <!-- ignore codes -->
2. FileUploadAction.java - 创建具体的Action class.
需要包括三个属性:
File image
String imageContentType
String imageFileName
image这个名字需要和s:file的name属性保持一致。
在Action class里实现具体的文件“拷贝”功能,即,在服务器的指定路径生成上传文件。
这里需要注意的是,如果什么都不写,只是简单的生成一个空的Action类,我们可以在eclipse的console里得到类似如下的路径信息:
C:\repository\upload_39d5eb38_6bab_496c_ba9d_8f05261ec0e2_00000000.tmp
这个tmp文件只一个临时文件,里面保存了上传文件的内容,有可能是字符流或者字节流。并且此文件在上传结束后会自动删除。
再说明下上传路径的定义。
这篇文章介绍了具体的设置方式
http://mossad.iteye.com/blog/1522905
在本例中,在struts.xml里的设置如下:
<constant name="struts.multipart.saveDir" value="/repository"/>
下面是struts.xml的全部内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <!-- to save uploaded files --> <constant name="struts.multipart.saveDir" value="/repository"/> <package name="basicstruts2" extends="struts-default"> <action name="fileUpload" class="org.apache.struts.helloworld.action.FileUploadAction" method="execute"> <result name="success">/Result.jsp</result> </action> </package> </struts>
下面是FileUploadAction的全部内容:
package org.apache.struts.helloworld.action; import java.io.File; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class FileUploadAction extends ActionSupport { private static final long serialVersionUID = 8938269342974350902L; private File image; private String imageContentType; private String imageFileName; @Override public String execute() throws Exception { String realpath = ServletActionContext.getServletContext().getRealPath("/repository"); System.out.println(realpath); System.out.println(image.getAbsolutePath()); File file = new File(realpath); if(!file.exists()){ file.mkdirs(); } FileUtils.copyFile(image, new File(file, imageFileName)); return SUCCESS; } public File getImage() { return image; } public void setImage(File image) { this.image = image; } public String getImageContentType() { return imageContentType; } public void setImageContentType(String imageContentType) { this.imageContentType = imageContentType; } public String getImageFileName() { return imageFileName; } public void setImageFileName(String imageFileName) { this.imageFileName = imageFileName; } }
这段代码会在 xxx web工程的根目录下生成一个repository文件夹来存放最后的上传文件。
例如:
..\apache-tomcat-7.0.42\webapps\basic_struts-1.0.0\repository
这里需要注意,临时存放的目录和最终的存放目录为两个不同的路径:
临时目录定义在了struts.xml,本例是:c:\repository\
文件存放路径是通过如下代码实现的:
String realpath = ServletActionContext.getServletContext().getRealPath("/repository"); File file = new File(realpath); if(!file.exists()){ file.mkdirs(); } FileUtils.copyFile(image, new File(file, imageFileName));
3.Result.jsp - 创建上传成功的结果页面。
最后用一个简单的页面显示出成功上传的文件名和类型:
<%@ page language="java" contentType="text/html; UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> File Name: ${imageFileName} <br/> Content Type: ${imageContentType} </body> </html>
说明:
这里没有显示的去定义Action的拦截器,因为basicstruts2 继承了struts-default。在default里已经包含了
FileUploadInterceptor。如果需要特别的定义,我们可以在Action里插入
<interceptor-ref name="fileUpload"/>
相关推荐
首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在Action类中声明一个`List<FileInfo>`类型的字段,用于接收上传的文件...
在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
在这个"Struts2之struts2文件上传详解案例struts011"中,我们将深入探讨如何实现这一功能。 首先,我们需要了解Struts2中的Action类,它是处理用户请求的核心组件。为了支持文件上传,我们需要创建一个继承自`org....
1. **文件上传组件**:在Struts2中,我们通常使用`Commons FileUpload`库来处理文件上传。这个库提供了处理多部分HTTP请求的能力,是Java中处理文件上传的标准库。我们需要在Struts2配置文件中引入对应的拦截器`...
结合Struts2,一个流行的Java Web框架,可以构建出高效、用户友好的文件上传功能。下面将详细介绍如何利用SWFUpload与Struts2来实现多文件上传。 **一、SWFUpload组件介绍** SWFUpload 是一个JavaScript库,它利用...
Struts2框架是Java Web开发中的一个流行MVC(Model-View-Controller)框架,它提供了丰富的功能,包括处理表单提交、文件上传等。在Struts2中,文件上传是一个常见的需求,可以帮助用户从客户端上传文件到服务器。...
在这个“struts2上传文件源代码”中,我们将深入探讨Struts2如何实现文件上传功能,以及涉及到的相关知识点。 首先,文件上传是Web应用中常见的功能,它允许用户从本地计算机选择文件并将其发送到服务器。在Struts2...
Struts2是一个强大的MVC框架,广泛应用于Java Web开发中,尤其在处理用户表单提交和文件上传等交互场景中表现出色。在这个“Struts2实现文件上传”的主题中,我们将深入探讨如何利用Struts2框架来实现在Web应用中的...
Struts2 文件上传是Web开发中的一个重要功能,它允许用户从他们的本地计算机向服务器传输文件。在Struts2框架中,文件上传是通过特定的拦截器实现的,这些拦截器处理了文件上传请求并提供了安全性和大小限制。下面将...
Struts2上传文件(直接用request)
这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...
在“struts2文件上传例子.rar”这个项目中,开发者已经使用Struts2.0框架实现了一个简单的文件上传功能。MyEclipse 6.6是一个集成开发环境,支持Java EE项目开发,可以直接导入该项目进行运行和调试。 首先,我们...
在Struts2中,文件上传是常见的功能之一,尤其是在处理用户提交表单时,比如上传图片、文档等。本文将详细讲解Struts2文件上传的实现原理以及源码分析。 首先,理解文件上传的基本流程。当用户通过HTML表单选择文件...
1. **.struts2配置**:在Struts2框架中,需要在`struts.xml`配置文件中添加相应的action配置,声明文件上传的处理方法。通常,你需要设置`<result>`类型为`stream`,以便处理上传的文件。 2. **Action类**:创建一...
在Struts2中,文件上传是常见的功能之一,尤其在处理用户提交的表单数据时,如上传图片、文档等。在本项目中,"struts2多文件的上传"实现了用户一次性上传多个文件的能力。 要理解这个功能,首先我们需要了解Struts...
在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...
在 Struts2 中,文件上传功能是通过特定的拦截器(`FileUploadInterceptor`)来实现的。以下是对标题和描述中所述知识点的详细解释: 1. **文件上传原理**: 文件上传的本质是客户端浏览器将本地文件以二进制流的...
在文件上传场景中,Struts2主要负责接收前端发送的文件数据,并将这些数据存储到服务器的指定位置。配置Struts2的Action类和相应的XML配置文件,可以定义文件上传的处理逻辑。 接着,jQuery是一个高效、简洁的...
在Struts2中,实现文件上传功能是一项常见的需求,它允许用户通过Web界面上传文件到服务器。以下是对该主题的详细解释: 1. **Struts2文件上传原理** Struts2使用Apache的Commons FileUpload库来处理文件上传。这...