`
johnson2132
  • 浏览: 27450 次
  • 性别: Icon_minigender_1
  • 来自: 潍坊
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts2 文件的上传和下载

阅读更多

    在Web项目中导入支持文件上传下载和IO输入输出的两个jar包。它们名字为commons-fileupload-1.2.1.jarcommons-io-1.4.jar

     

package com.example.struts.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
	//上传文件存放路径
	private final static String UPLOADDIR = "/upload";
	//上传文件集合
	private List<File> file;
	//上传文件名集合
	private List<String> fileFileName;
	//上传文件内容类型集合
	private List<String> fileContentType;

	public List<File> getFile() {
		return file;
	}

	public void setFile(List<File> file) {
		this.file = file;
	}

	public List<String> getFileFileName() {
		return fileFileName;
	}

	public void setFileFileName(List<String> fileFileName) {
		this.fileFileName = fileFileName;
	}

	public List<String> getFileContentType() {
		return fileContentType;
	}

	public void setFileContentType(List<String> fileContentType) {
		this.fileContentType = fileContentType;
	}

	public String execute() throws Exception {
		for (int i = 0; i < file.size(); i++) {
			//循环上传每个文件
			uploadFile(i);
		}
		return "success";
	}

	//执行上传功能
	private void uploadFile(int i) throws FileNotFoundException, IOException {
		try {
			InputStream in = new FileInputStream(file.get(i));
			String dir = ServletActionContext.getRequest().getRealPath(UPLOADDIR);
			File uploadFile = new File(dir, this.getFileFileName().get(i));
			OutputStream out = new FileOutputStream(uploadFile);
			byte[] buffer = new byte[1024 * 1024];
			int length;
			while ((length = in.read(buffer)) > 0) {
				out.write(buffer, 0, length);
			}

			in.close();
			out.close();
		} catch (FileNotFoundException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}


}

 fileFileName”和“fileContentType”读者看了有点别扭,尤其是“fileFileName”感觉不符合Java命名规范,但是这两个属性变量是fileUpload”拦截器类中的类公有变量名字,只有这样定义,UploadAction执行时候会把在页面上选择的上传文件的属性值放在这两个变量里面!

package com.example.struts.action;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class DownLoadAction extends ActionSupport {
	//下载文件原始存放路径
	private final static String DOWNLOADFILEPATH="/upload/";
	//文件名参数变量
	private String fileName;

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	//从下载文件原始存放路径读取得到文件输出流
	public InputStream getDownloadFile() {
		return 
	ServletActionContext.getServletContext().getResourceAsStream(DOWNLOADFILEPATH+fileName);
	}
	//如果下载文件名为中文,进行字符编码转换
	public String getDownloadChineseFileName() {
		String downloadChineseFileName = fileName;

		try {
			downloadChineseFileName = new String(downloadChineseFileName.getBytes(), "ISO8859-1");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		return downloadChineseFileName;
	}

	public String execute() {
		return SUCCESS;
	}


}

 

	<!-- 上传文件表单定义 -->
	<s:form action="upload.action" method="post" enctype="multipart/form-data">
		<tr>
	<!-- 上传文件标签定义 -->
	<td>上传文件:<s:file name="file"></s:file></td>
	</tr>
	<tr>
	<td>再次上传文件:<s:file name="file"></s:file></td>
	</tr>
	<tr>
	<td align="left"><s:submit name="submit" value="提交"></s:submit></td>
	</tr>
	</s:form>

 

上传文件:
			<table>
		<!-- 循环显示上传成功文件名 -->
		<s:iterator value="fileFileName" status="fn">
		<tr>
		<td>
		<!-- 上传成功文件名 -->
		<s:property />		
		</td>
		<td>
		<!-- 下载文件链接内容为定义的下载Action -->
		<!-- 下载文件名作为链接参数fileName值,用OGNL表达式表达 -->	
		<a href="<s:url value='download.action'>  				
                 	<s:param name='fileName'
 value='fileFileName[#fn.getIndex()]'/>  
                 </s:url>">下载</a>
		</td>
		</tr>
		</s:iterator>		
		</table>	

 

	<package name="C01" extends="struts-default" namespace="/">
	<!-- 通过Action类处理才导航的的Action定义 -->
		<action name="upload" class="com.example.struts.action.UploadAction">
			<result name="input">/jsp/upload.jsp</result>
			<result name="success">/jsp/result.jsp</result>
			<!--显示配置文件上传拦截器  -->
			<interceptor-ref name="fileUpload">
			<!--指定特定类型的上传文件  -->
			<param name ="allowedTypes">text/plain,application/xml</param>
			</interceptor-ref >
			<interceptor-ref name="defaultStack"></interceptor-ref >
		</action>
	<!-- 下载文件的Action定义 -->
		<action name="download" class="com.example.struts.action.DownLoadAction">
			<!-- 设置文件名参数,由页面上传入 -->
			<param name="fileName"></param>
			<result name="success" type="stream">
				<!-- 下载文件类型定义 -->
				<param name="contentType">text/plain</param>
				<!-- 下载文件处理方法 -->
				<param name="contentDisposition">
					attachment;filename="${downloadChineseFileName}"
				</param>
				<!-- 下载文件输出流定义 -->
				<param name="inputName">downloadFile</param>
			</result>
		</action>
    <action name="index">
    	<result>/jsp/upload.jsp
    	</result>
    </action>
	</package>

 定义了一个名为“allowedTypes”的参数,其中在<param></param>之间的是文件类型,也可以用“,”间隔,表示允许上传多个文件类型txtxml格式的文件

'.a'      : 'application/octet-stream', 
'.ai'     : 'application/postscript', 
'.aif'    : 'audio/x-aiff', 
'.aifc'   : 'audio/x-aiff', 
'.aiff'   : 'audio/x-aiff', 
'.au'     : 'audio/basic', 
'.avi'    : 'video/x-msvideo', 
'.bat'    : 'text/plain', 
'.bcpio' : 'application/x-bcpio', 
'.bin'    : 'application/octet-stream', 
'.bmp'    : 'image/x-ms-bmp', 
'.c'      : 'text/plain', 
# Duplicates 
'.cdf'    : 'application/x-cdf', 
'.cdf'    : 'application/x-netcdf', 
'.cpio'   : 'application/x-cpio', 
'.csh'    : 'application/x-csh', 
'.css'    : 'text/css', 
'.dll'    : 'application/octet-stream', 
'.doc'    : 'application/msword', 
'.dot'    : 'application/msword', 
'.dvi'    : 'application/x-dvi', 
'.eml'    : 'message/rfc822', 
'.eps'    : 'application/postscript', 
'.etx'    : 'text/x-setext', 
'.exe'    : 'application/octet-stream', 
'.gif'    : 'image/gif', 
'.gtar'   : 'application/x-gtar', 
'.h'      : 'text/plain', 
'.hdf'    : 'application/x-hdf', 
'.htm'    : 'text/html', 
'.html'   : 'text/html', 
'.ief'    : 'image/ief', 
'.jpe'    : 'image/jpeg', 
'.jpeg'   : 'image/jpeg', 
'.jpg'    : 'image/jpeg', 
'.js'     : 'application/x-javascript', 
'.ksh'    : 'text/plain', 
'.latex' : 'application/x-latex', 
'.m1v'    : 'video/mpeg', 
'.man'    : 'application/x-troff-man', 
'.me'     : 'application/x-troff-me', 
'.mht'    : 'message/rfc822', 
'.mhtml' : 'message/rfc822', 
'.mif'    : 'application/x-mif', 
'.mov'    : 'video/quicktime', 
'.movie' : 'video/x-sgi-movie', 
'.mp2'    : 'audio/mpeg', 
'.mp3'    : 'audio/mpeg', 
'.mpa'    : 'video/mpeg', 
'.mpe'    : 'video/mpeg', 
'.mpeg'   : 'video/mpeg', 
'.mpg'    : 'video/mpeg', 
'.ms'     : 'application/x-troff-ms', 
'.nc'     : 'application/x-netcdf', 
'.nws'    : 'message/rfc822', 
'.o'      : 'application/octet-stream', 
'.obj'    : 'application/octet-stream', 
'.oda'    : 'application/oda', 
'.p12'    : 'application/x-pkcs12', 
'.p7c'    : 'application/pkcs7-mime', 
'.pbm'    : 'image/x-portable-bitmap', 
'.pdf'    : 'application/pdf', 
'.pfx'    : 'application/x-pkcs12', 
'.pgm'    : 'image/x-portable-graymap', 
'.pl'     : 'text/plain', 
'.png'    : 'image/png', 
'.pnm'    : 'image/x-portable-anymap', 
'.pot'    : 'application/vnd.ms-powerpoint', 
'.ppa'    : 'application/vnd.ms-powerpoint', 
'.ppm'    : 'image/x-portable-pixmap', 
'.pps'    : 'application/vnd.ms-powerpoint', 
'.ppt'    : 'application/vnd.ms-powerpoint', 
'.ps'     : 'application/postscript', 
'.pwz'    : 'application/vnd.ms-powerpoint', 
'.py'     : 'text/x-python', 
'.pyc'    : 'application/x-python-code', 
'.pyo'    : 'application/x-python-code', 
'.qt'     : 'video/quicktime', 
'.ra'     : 'audio/x-pn-realaudio', 
'.ram'    : 'application/x-pn-realaudio', 
'.ras'    : 'image/x-cmu-raster', 
'.rdf'    : 'application/xml', 
'.rgb'    : 'image/x-rgb', 
'.roff'   : 'application/x-troff', 
'.rtx'    : 'text/richtext', 
'.sgm'    : 'text/x-sgml', 
'.sgml'   : 'text/x-sgml', 
'.sh'     : 'application/x-sh', 
'.shar'   : 'application/x-shar', 
'.snd'    : 'audio/basic', 
'.so'     : 'application/octet-stream', 
'.src'    : 'application/x-wais-source', 
'.sv4cpio': 'application/x-sv4cpio', 
'.sv4crc' : 'application/x-sv4crc', 
'.swf'    : 'application/x-shockwave-flash', 
'.t'      : 'application/x-troff', 
'.tar'    : 'application/x-tar', 
'.tcl'    : 'application/x-tcl', 

'.tex'    : 'application/x-tex', 
'.texi'   : 'application/x-texinfo', 
'.texinfo': 'application/x-texinfo', 
'.tif'    : 'image/tiff', 
'.tiff'   : 'image/tiff', 
'.tr'     : 'application/x-troff', 
'.tsv'    : 'text/tab-separated-values', 
'.txt'    : 'text/plain', 
'.ustar' : 'application/x-ustar', 
'.vcf'    : 'text/x-vcard', 
'.wav'    : 'audio/x-wav', 
'.wiz'    : 'application/msword', 
'.wsdl'   : 'application/xml', 
'.xbm'    : 'image/x-xbitmap', 
'.xlb'    : 'application/vnd.ms-excel', 
# Duplicates 
'.xls'    : 'application/excel', 
'.xls'    : 'application/vnd.ms-excel', 
'.xml'    : 'text/xml', 
'.xpdl'   : 'application/xml', 
'.xpm'    : 'image/x-xpixmap', 
'.xsl'    : 'application/xml', 
'.xwd'    : 'image/x-xwindowdump', 
'.zip'    : 'application/zip', 

firefox 和 ie 的文件类型区别 
Java代码 
firefox image/jpeg image/bmp image/gif image/png  

ie 6 image/pjpeg image/bmp image/gif image/x-png  

ie 7 image/pjpeg image/bmp image/gif image/x-png  

ie 8 image/pjpeg image/bmp image/gif image/x-png

 。这里允许上传文件类型为

 

3
1
分享到:
评论

相关推荐

    struts2文件上传和下载

    在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...

    struts2文件上传和下载精细讲解

    总的来说,Struts2的文件上传和下载功能通过集成Apache Commons FileUpload库,大大简化了开发者的工作,提供了友好的API和配置选项,使得处理文件上传和下载变得轻而易举。开发者只需要关注业务逻辑,无需过多关注...

    struts2文件上传下载源代码

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

    struts2 文件上传和下载

    在Struts2中,文件上传和下载是常见的功能,对于用户交互和数据交换至关重要。以下是对这一主题的详细阐述。 1. **文件上传** - **MultipartResolver**: 在处理文件上传时,Struts2首先需要一个MultipartResolver...

    struts2 文件上传和下载示例程序

    这个“Struts2 文件上传和下载示例程序”是一个演示如何在Struts2中实现这两个功能的实例。 文件上传是Web应用程序中的一项重要功能,允许用户从本地计算机选择文件并将其传输到服务器。在Struts2中,这一过程涉及...

    Struts2文件上传和下载教程

    ### Struts2文件上传与下载教程 #### 一、文件上传原理及实现 **1.1 基础概念** 文件上传是Web开发中的常见需求之一。在Struts2框架中,实现文件上传主要依赖于表单的`enctype`属性设置为`multipart/form-data`。...

    struts2中的文件上传和下载示例

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。在Struts2中处理文件上传和下载是常见的需求,对于构建交互式的Web应用来说至关重要。以下将详细介绍Struts2中如何实现这两个...

    Struts2多文件上传下载实例

    在实际项目中,文件上传和下载功能是必不可少的,本实例将详细讲解如何在Struts2框架下实现单个文件及多个文件的上传与下载。 首先,我们需要在Struts2的配置文件(struts.xml)中添加相关的Action配置,以便处理文件...

    struts2实现文件上传下载

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。

    Struts2文件的上传和下载

    Struts2 文件上传和下载是Web开发中常见的情景,主要涉及到HTML表单、HTTP请求、文件处理以及服务器端的响应。以下将详细介绍Struts2框架下如何进行文件的上传和下载。 首先,理解文件上传的基本原理至关重要。当在...

    struts2文件上传与下载

    在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户在Web表单中提交的文件,如图片、文档等。下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们...

    struts2文件上传下载

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

    Struts2文件上传与下载

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...

    struts实现文件上传和下载源代码

    例如,Struts 1和Struts 2在处理文件上传和下载的方式上有显著区别,Struts 2引入了更多面向Action的API和拦截器机制。 5. **源代码分析** 在提供的压缩包文件`upload`中,可能包含了Action类、Struts配置文件、...

    struts2文件上传jar

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

    Struts2文件上传下载和表单重复提交问题

    综上所述,Struts2文件上传下载和表单重复提交涉及多个技术点,包括Struts2的配置、文件操作、HTTP响应头设置、安全性和异常处理。理解并熟练掌握这些知识点,对于构建健壮的Web应用程序至关重要。

Global site tag (gtag.js) - Google Analytics