`

Struts2之文件上传

    博客分类:
  • Web
阅读更多

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:filename属性保持一致。

 

在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中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在Action类中声明一个`List&lt;FileInfo&gt;`类型的字段,用于接收上传的文件...

    Struts2多个文件上传

    在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...

    struts2文件上传下载源代码

    在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...

    Struts2之struts2文件上传详解案例struts011

    在这个"Struts2之struts2文件上传详解案例struts011"中,我们将深入探讨如何实现这一功能。 首先,我们需要了解Struts2中的Action类,它是处理用户请求的核心组件。为了支持文件上传,我们需要创建一个继承自`org....

    struts2 实现文件批量上传

    1. **文件上传组件**:在Struts2中,我们通常使用`Commons FileUpload`库来处理文件上传。这个库提供了处理多部分HTTP请求的能力,是Java中处理文件上传的标准库。我们需要在Struts2配置文件中引入对应的拦截器`...

    swfuplaod+struts2实现多文件上传

    结合Struts2,一个流行的Java Web框架,可以构建出高效、用户友好的文件上传功能。下面将详细介绍如何利用SWFUpload与Struts2来实现多文件上传。 **一、SWFUpload组件介绍** SWFUpload 是一个JavaScript库,它利用...

    struts2框架下的文件上传

    Struts2框架是Java Web开发中的一个流行MVC(Model-View-Controller)框架,它提供了丰富的功能,包括处理表单提交、文件上传等。在Struts2中,文件上传是一个常见的需求,可以帮助用户从客户端上传文件到服务器。...

    struts2上传文件源代码

    在这个“struts2上传文件源代码”中,我们将深入探讨Struts2如何实现文件上传功能,以及涉及到的相关知识点。 首先,文件上传是Web应用中常见的功能,它允许用户从本地计算机选择文件并将其发送到服务器。在Struts2...

    Struts2实现文件上传

    Struts2是一个强大的MVC框架,广泛应用于Java Web开发中,尤其在处理用户表单提交和文件上传等交互场景中表现出色。在这个“Struts2实现文件上传”的主题中,我们将深入探讨如何利用Struts2框架来实现在Web应用中的...

    struts2文件上传

    Struts2 文件上传是Web开发中的一个重要功能,它允许用户从他们的本地计算机向服务器传输文件。在Struts2框架中,文件上传是通过特定的拦截器实现的,这些拦截器处理了文件上传请求并提供了安全性和大小限制。下面将...

    Struts2上传文件(直接用request)

    Struts2上传文件(直接用request)

    struts2文件上传jar

    这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...

    struts2文件上传例子.rar

    在“struts2文件上传例子.rar”这个项目中,开发者已经使用Struts2.0框架实现了一个简单的文件上传功能。MyEclipse 6.6是一个集成开发环境,支持Java EE项目开发,可以直接导入该项目进行运行和调试。 首先,我们...

    Struts2文件上传源码

    在Struts2中,文件上传是常见的功能之一,尤其是在处理用户提交表单时,比如上传图片、文档等。本文将详细讲解Struts2文件上传的实现原理以及源码分析。 首先,理解文件上传的基本流程。当用户通过HTML表单选择文件...

    struts2文件上传实例

    1. **.struts2配置**:在Struts2框架中,需要在`struts.xml`配置文件中添加相应的action配置,声明文件上传的处理方法。通常,你需要设置`&lt;result&gt;`类型为`stream`,以便处理上传的文件。 2. **Action类**:创建一...

    struts2多文件的上传

    在Struts2中,文件上传是常见的功能之一,尤其在处理用户提交的表单数据时,如上传图片、文档等。在本项目中,"struts2多文件的上传"实现了用户一次性上传多个文件的能力。 要理解这个功能,首先我们需要了解Struts...

    struts2文件上传下载

    在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...

    struts2文件上传源码和步骤

    在 Struts2 中,文件上传功能是通过特定的拦截器(`FileUploadInterceptor`)来实现的。以下是对标题和描述中所述知识点的详细解释: 1. **文件上传原理**: 文件上传的本质是客户端浏览器将本地文件以二进制流的...

    struts2+jquery+ajax文件异步上传

    在文件上传场景中,Struts2主要负责接收前端发送的文件数据,并将这些数据存储到服务器的指定位置。配置Struts2的Action类和相应的XML配置文件,可以定义文件上传的处理逻辑。 接着,jQuery是一个高效、简洁的...

    实现struts2的文件上传文件功能

    在Struts2中,实现文件上传功能是一项常见的需求,它允许用户通过Web界面上传文件到服务器。以下是对该主题的详细解释: 1. **Struts2文件上传原理** Struts2使用Apache的Commons FileUpload库来处理文件上传。这...

Global site tag (gtag.js) - Google Analytics