上传:
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是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。
在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...
在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...
总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...
在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户在Web表单中提交的文件,如图片、文档等。下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们...
在这个"Struts2之struts2文件上传详解案例struts011"中,我们将深入探讨如何实现这一功能。 首先,我们需要了解Struts2中的Action类,它是处理用户请求的核心组件。为了支持文件上传,我们需要创建一个继承自`org....
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...
在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...
需求 1.能够对多个文件进行上传(可以选择上传文件个...提供多文件上传,上传成功后,提供刚上传的文件下载功能(其他的都可以在其上面进行扩充) 多文件 上传 下载 随意文件 java Struts2 单例 配置 动态读取 李顺利
这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...
在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...
综上所述,Struts2文件上传下载和表单重复提交涉及多个技术点,包括Struts2的配置、文件操作、HTTP响应头设置、安全性和异常处理。理解并熟练掌握这些知识点,对于构建健壮的Web应用程序至关重要。
总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。
在本项目中,我们关注的是Struts2中的文件上传和下载功能,这些功能是Web开发中常见的需求,尤其在处理用户数据提交或提供资源下载时。下面将详细介绍这个“struts2文件上传下载(注解版)”项目的关键知识点。 1. ...
在“struts2文件上传下载实例”中,我们将探讨如何在Struts2框架下实现文件的上传和下载功能,这对于许多Web应用程序来说是必不可少的特性。 首先,`pom.xml`文件是Maven项目对象模型的配置文件,它定义了项目的...
Struts2 文件上传和下载是Web开发中常见的情景,主要涉及到HTML表单、HTTP请求、文件处理以及服务器端的响应。以下将详细介绍Struts2框架下如何进行文件的上传和下载。 首先,理解文件上传的基本原理至关重要。当在...
在实际项目中,文件上传和下载功能是必不可少的,本实例将详细讲解如何在Struts2框架下实现单个文件及多个文件的上传与下载。 首先,我们需要在Struts2的配置文件(struts.xml)中添加相关的Action配置,以便处理文件...
2. **添加Struts2插件**:Struts2的文件上传功能依赖于`struts2-convention-plugin`和`struts2-core`等库。在`struts.xml`配置文件中,需要启用Multipart解析器,例如添加`<constant name="struts.multipart.parser...