当前位置:首页 > 开发 > Web前端 > 前端 > 正文

Struts2之文件上传

发表于: 2015-02-22   作者:codyJava   来源:转载   浏览次数:
摘要: Struts 2 - 文件上传 参考文章: http://www.dzone.com/tutorials/java/struts-2/struts-2-example/struts-2-file-upload-example-1.html   拦截器(Interceptor):FileUploadInterceptor 通过拦截器的设置,我们可以定义 1.上传文件的类型(al

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之文件上传

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
作者:Ruthless-Hadoop 来自:http://www.cnblogs.com/linjiqin/archive/2011/03/21/1990674.html 学
通过2种方式模拟单个文件上传,效果如下所示 开发步骤如下: 1、新建一个web工程,导入struts2上传
通过2种方式模拟单个文件上传,效果如下所示 开发步骤如下: 1、新建一个web工程,导入struts2上传
struts2之单个文件上传 通过2种方式模拟单个文件上传,效果如下所示 开发步骤如下: 1、新建一个web
13.1 文件上传 13.1.1 概述 在开发基于Web的应用的时候,经常会碰到需要实现文件上传、下载的功能,
1.单文件上传,不多说,见图: 注意第3步action中的属性名,以及get和set方法,名称不能乱写,属性名后缀不
前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题, 所以今天我们就来讨论一下这个问
前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题, 所以今天我们就来讨论一下这个问
前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题, 所以今天我们就来讨论一下这个问
转自:http://wanjianfei.iteye.com/blog/444067 1. 文件上传的原理: 表单元素的 enctype 属性指定
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号