`
dreamoftch
  • 浏览: 496835 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2文件下载、上传

阅读更多

 

上传:

 

Action:

 

package com.tch.test.template.web.action;

import java.io.File;
import org.apache.commons.io.FileUtils;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.io.IOException;

import com.opensymphony.xwork2.ActionSupport;

@Component("uploadFileAction")
@Scope("prototype")
public class UploadFile extends ActionSupport {
	private static final long serialVersionUID = 1L;
	private File myFile;
	private String myFileContentType;
	private String myFileFileName;
	private String destPath;

	public String uploadFile() {
		/* Copy file to a safe location */
		destPath = "e:/";

		try {
			System.out.println("Src File name: " + myFile);
			System.out.println("Dst File name: " + myFileFileName);

			File destFile = new File(destPath+myFileFileName);
			FileUtils.copyFile(myFile, destFile);

		} catch (IOException e) {
			e.printStackTrace();
			return ERROR;
		}

		return SUCCESS;
	}

	public File getMyFile() {
		return myFile;
	}

	public void setMyFile(File myFile) {
		this.myFile = myFile;
	}

	public String getMyFileContentType() {
		return myFileContentType;
	}

	public void setMyFileContentType(String myFileContentType) {
		this.myFileContentType = myFileContentType;
	}

	public String getMyFileFileName() {
		return myFileFileName;
	}

	public void setMyFileFileName(String myFileFileName) {
		this.myFileFileName = myFileFileName;
	}
}

 

 

struts.xml:

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

	<package name="default" namespace="/upload" extends="struts-default">
	
		<!-- 进入上传页面 -->
		<action name="index">
			<result>
				/upload/upload.jsp
			</result>
		</action>
		<!-- 处理文件上传 -->
		<action name="uploadFile" class="uploadFileAction"
			method="uploadFile">
			<interceptor-ref name="fileUpload">  
                <param name="maximumSize">7000000</param>  
            </interceptor-ref>  
            <interceptor-ref name="defaultStack"></interceptor-ref>  
			<result name="success">
				/upload/uploadSuccess.jsp
			</result>
			<result name="input">
				/upload/uploadError.jsp
			</result>
		</action>
	</package>


</struts>

 

 

struts.properties:

 

#国际化字符编码
struts.i18n.encoding=UTF-8
#处理请求的后缀格式
struts.action.extension=htm,action
#开发模式
struts.devMode=true
#是否允许动态方法调用
struts.enable.DynamicMethodInvocation=true
#限制最大文件上传大小
struts.multipart.maxSize=10485760

 

 

 

上面限制上传文件大小的方式二选一:

 一:要么通过在action中加入拦截器设置来控制:

 

<!-- 处理文件上传 -->
		<action name="uploadFile" class="uploadFileAction"
			method="uploadFile">
			<interceptor-ref name="fileUpload">  
                <param name="maximumSize">7000000</param>  
            </interceptor-ref>  
            <interceptor-ref name="defaultStack"></interceptor-ref>  
			<result name="success">
				/upload/uploadSuccess.jsp
			</result>
			<result name="input">
				/upload/uploadError.jsp
			</result>
		</action>

 

 

二:要么通过在struts.properties中配置:

 

#国际化字符编码
struts.i18n.encoding=UTF-8
#处理请求的后缀格式
struts.action.extension=htm,action
#开发模式
struts.devMode=true
#是否允许动态方法调用
struts.enable.DynamicMethodInvocation=true
#限制最大文件上传大小
struts.multipart.maxSize=10485760

 

上传页面 upload.jsp:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'upload.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
    <form action="upload/uploadFile.htm" method="post" enctype="multipart/form-data">
      <label for="myFile">选择文件:</label>
      <input type="file" name="myFile" />
      <input type="submit" value="上传"/>
   </form>
  </body>
</html>

 

上传成功:uploadSuccess.jsp:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'uploadSuccess.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
   文件 <s:property value="myFileFileName"/> 上传成功!
  </body>
</html>

 

如果文件大小超过限制大小,会进入result为 input 的页面:

 

上传失败:uploadError.jsp:

 

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>File Upload Error</title>
</head>
<body>
上传失败.
</body>
</html>

 

 

多文件上传:

 

差别不大,首先是页面(多个相同的input file ,name相同):

 

upload.jsp:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'upload.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <body>
    <form action="upload/uploadFile.htm" method="post" enctype="multipart/form-data">
      <label for="myFile">选择文件:</label>
      <input type="file" name="myFile" /><br>
      <input type="file" name="myFile" /><br>
      <input type="submit" value="上传"/>
   </form>
  </body>
</html>

 

 

后台action里面接受文件的变量也使用集合:

 

package com.tch.test.template.web.action;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import com.opensymphony.xwork2.ActionSupport;

@Component("uploadFileAction")
@Scope("prototype")
public class UploadFile extends ActionSupport {
	private static final long serialVersionUID = 1L;
	private List<File> myFile;
	private List<String> myFileContentType;
	private List<String> myFileFileName;
	private String destPath;

	public String uploadFile() {
		/* Copy file to a safe location */
		destPath = "e:/";

		try {
//			System.out.println("Src File name: " + myFile);
			System.out.println("Dst File name: " + myFileFileName);

			File srcFile = null;
			File destFile = null;
			int length = myFile.size();
			for(int i=0;i<length;i++){
				srcFile = myFile.get(i);
				destFile = new File(destPath+myFileFileName.get(i));
				FileUtils.copyFile(srcFile, destFile);
			}
			
		} catch (IOException e) {
			e.printStackTrace();
			return ERROR;
		}

		return SUCCESS;
	}

	public List<File> getMyFile() {
		return myFile;
	}

	public void setMyFile(List<File> myFile) {
		this.myFile = myFile;
	}

	public List<String> getMyFileContentType() {
		return myFileContentType;
	}

	public void setMyFileContentType(List<String> myFileContentType) {
		this.myFileContentType = myFileContentType;
	}

	public List<String> getMyFileFileName() {
		return myFileFileName;
	}

	public void setMyFileFileName(List<String> myFileFileName) {
		this.myFileFileName = myFileFileName;
	}

}

 

其它的都一样。

 

 

下载:

 

struts.xml:

 

	<package name="download" namespace="/" extends="struts-default">
		<!-- 下载-->  
        <action name="download" class="uploadFileAction"  
            method="download">  
            <result type="stream">  
            	<param name="contentType">application/octet-stream;charset=ISO8859-1</param>  
            	<param name="inputName">myInputStream</param>
		<param name="contentDisposition">attachment;filename="${downloadFileName}"</param>  
		<param name="bufferSize">4096</param>
            </result>  
        </action> 
	</package>

  

 

 inputName指定获取文件流的方式,例如myInputStream的话,就需要action里面有getMyInputStream的方法

 

contentDisposition指定下载文件的名字,这里通过后台的方法返回文件名,解决中文的问题:

 

package com.tch.test.template.web.action;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import com.opensymphony.xwork2.ActionSupport;

@Component("uploadFileAction")
@Scope("prototype")
public class UploadFile extends ActionSupport {
	private static final long serialVersionUID = 1L;
	
	private String downloadFileName;


	public String download(){
		return SUCCESS;
	}
	
	public InputStream getMyInputStream()throws Exception{  
        return ServletActionContext.getServletContext().getResourceAsStream("/WEB-INF/中文名.doc");  
    }
	
	public String getDownloadFileName() {
		 try {   
			 downloadFileName = new String("中文名.doc".getBytes(), "ISO8859-1");   
	        } catch (UnsupportedEncodingException e) {   
	            e.printStackTrace();   
	        }   
	        return downloadFileName;
	}

	public void setDownloadFileName(String downloadFileName) {
		this.downloadFileName = downloadFileName;
	}

}

 

 

 

分享到:
评论

相关推荐

    struts2文件上传下载源代码

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

    struts2实现文件上传下载

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

    struts2文件上传下载

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

    struts2文件上传和下载

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

    struts2_uploadify带进度条的多文件上传下载

    总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...

    struts2文件上传与下载

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

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

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

    Struts2文件上传与下载

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

    Struts2多个文件上传

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

    struts2实现多文件上传下载

    需求 1.能够对多个文件进行上传(可以选择上传文件个...提供多文件上传,上传成功后,提供刚上传的文件下载功能(其他的都可以在其上面进行扩充) 多文件 上传 下载 随意文件 java Struts2 单例 配置 动态读取 李顺利

    struts2文件上传jar

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

    基于Struts2的文件上传下载功能的完整源代码。

    在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...

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

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

    struts实现的文件上传下载功能

    总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。

    struts2文件上传下载(注解版)

    在本项目中,我们关注的是Struts2中的文件上传和下载功能,这些功能是Web开发中常见的需求,尤其在处理用户数据提交或提供资源下载时。下面将详细介绍这个“struts2文件上传下载(注解版)”项目的关键知识点。 1. ...

    struts2文件上传下载实例

    在“struts2文件上传下载实例”中,我们将探讨如何在Struts2框架下实现文件的上传和下载功能,这对于许多Web应用程序来说是必不可少的特性。 首先,`pom.xml`文件是Maven项目对象模型的配置文件,它定义了项目的...

    Struts2文件的上传和下载

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

    Struts2多文件上传下载实例

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

    JavaEE Struts文件上传

    2. **添加Struts2插件**:Struts2的文件上传功能依赖于`struts2-convention-plugin`和`struts2-core`等库。在`struts.xml`配置文件中,需要启用Multipart解析器,例如添加`&lt;constant name="struts.multipart.parser...

Global site tag (gtag.js) - Google Analytics