- 其他struts2 文件上传与下载原理 详细资料:http://blog.csdn.net/lisa0220/article/details/6400767
- /**
- * Struts2Test
- * 使用Struts2上传文件
- */
- package com.labci.struts2.action;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.struts2.interceptor.ServletRequestAware;
- import com.opensymphony.xwork2.ActionSupport;
- public class UploadFileAction extends ActionSupport implements
- ServletRequestAware {
- private static final long serialVersionUID = -1896915260152387341L;
- private HttpServletRequest request;
- public void setServletRequest(HttpServletRequest req) {
- this.request=req;
- }
- private List<File> fileName;//这里的"fileName"一定要与页面表单中的文件域名相同(获取上传文件)
- private List<String> fileNameContentType;//格式同上"fileName"+ContentType(固定格式)
- private List<String> fileNameFileName;//格式同上"fileName"+FileName(固定格式)
- private String savePath;//文件上传后保存的路径(在struts.xml中配置,也可在后台定义)
- private String allowTypes;//允许上传的文件类型(在struts.xml中配置,也可在后台定义)
- public List<File> getFileName() {
- return fileName;
- }
- public void setFileName(List<File> fileName) {
- this.fileName = fileName;
- }
- public List<String> getFileNameContentType() {
- return fileNameContentType;
- }
- public void setFileNameContentType(List<String> fileNameContentType) {
- this.fileNameContentType = fileNameContentType;
- }
- public List<String> getFileNameFileName() {
- return fileNameFileName;
- }
- public void setFileNameFileName(List<String> fileNameFileName) {
- this.fileNameFileName = fileNameFileName;
- }
- @SuppressWarnings("deprecation")
- public String getSavePath() {
- return request.getRealPath(savePath);
- }
- public void setSavePath(String savePath) {
- this.savePath = savePath;
- }
- public String getAllowTypes() {
- return allowTypes;
- }
- public void setAllowTypes(String allowTypes) {
- this.allowTypes = allowTypes;
- }
- @Override
- public String execute() throws Exception {
- //验证上传的文件
- List<String> fileTypes=getFileNameContentType(); ---获得上传文件的类型
- String []allowTypes=getAllowTypes().split(","); ---获得配置的允许上传文件类型
- List<String> typesList=Arrays.asList(allowTypes);
- boolean allowFlag=true; --是否存在不允许上传的文件类型
- for(String type:fileTypes){
- if(!typesList.contains(type)){
- allowFlag=false;
- break;
- }
- }
- if(!allowFlag){
- request.setAttribute("fileTypeError",
- "您上传的文件中存在不允许上传的类型,允许上传的类型为:"+getAllowTypes());
- return INPUT;
- }
- //指定文件保存的路径
- File dir=new File(getSavePath());
- if(!dir.exists()){
- dir.mkdirs();
- }
- List<File> files=getFileName(); ---获取所有上传的文件
- for(int i=0;i<files.size();i++){
- //构造服务器内存写入磁盘的输出流
- FileOutputStream fos=new FileOutputStream(getSavePath()+"//"+getFileNameFileName().get(i));
- //构造服务器内存读取上传文件的输入流
- FileInputStream fis=new FileInputStream(getFileName().get(i));
- byte []buffers=new byte[1024];
- int len=0;
- while((len=fis.read(buffers))!=-1){ //读取文件
- fos.write(buffers,0,len); //写入文件
- }
- }
- //构造返回页面的数据
- List<String> fileHrefsList=new ArrayList<String>();
- for(String fileName:getFileNameFileName()){ ---遍历所有上传文件的名称
- String href="<a href="/" mce_href="/""downloadFile.action?fileName="+fileName+"/">"+fileName+"</a>";
- fileHrefsList.add(href);
- }
- request.setAttribute("fileNameList", fileHrefsList);
- return SUCCESS;
- }
- }
- 浏览: 515062 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (451)
- 数据传递 (17)
- js (4)
- Json (1)
- XML (0)
- Ajax (3)
- JQuery (2)
- EXTJS (7)
- 模板框架 (6)
- servlet/jsp (17)
- 持久层框架 (10)
- JSF框架 (5)
- 框架 (43)
- 框架整合 (17)
- MyEclipse (26)
- java (30)
- 数据库 (20)
- 网站 (12)
- 工具 (31)
- 操作系统应用 (8)
- 网络 (4)
- 性能优化 (7)
- 导出数据 (3)
- 日志工具Log4j (2)
- 报表 (1)
- 微信 (5)
- 邮件/手机短信/文本编辑器/地图 (21)
- 问题 (3)
- 并发 (16)
- java网络开发 (6)
- 抓取数据 (8)
- Android开发 (14)
- 安全 (3)
- Linux (5)
- 跨域 (8)
- Maven (12)
- 分布式 (21)
- 缓存 (7)
- 事务 (4)
- 服务器集群 (5)
- 负载均衡 (12)
- 前端开发 (13)
- photoshop (1)
- 架构 (1)
- 远程访问 (5)
- 搜索引擎 (1)
- Python (1)
- PHP (1)
- WebSocket (1)
最新评论
-
leiguolin:
楼主明显的误导人啊
springMVC一个Controller处理所有用户请求的并发问题 -
zxp209:
局部变量,成员变量没搞清楚呢
springMVC一个Controller处理所有用户请求的并发问题 -
NiuBie:
如果方法里无局部变量,那么不受任何影响;如果方法里有局部变量, ...
springMVC一个Controller处理所有用户请求的并发问题 -
wx819648354:
然后这是jsp的代码,谢谢var userEm = new E ...
EXT提交表单 -
wx819648354:
这是servlet的方法,但是一直提交不过去,能帮我看下么pu ...
EXT提交表单
----------------------------------------index.jsp---------------------------------------------------------------------------
- <%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>Struts2多文件上传</title>
- </head>
- <body>
- <table>
- <tr>
- <td>
- <c:choose>
- <c:when test="${!empty fileTypeError}">
- <font color="red"><b>${fileTypeError}</b></font>
- </c:when>
- <c:otherwise>
- <c:forEach items="${fileNameList}" var="fileName">
- ${fileName}<br/>
- </c:forEach>
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
- </table>
- <!-- 不一定要选择所有文件才可以上传 -->
- <form action="uploadFile.action" method="post" enctype="multipart/form-data">
- <input type="file" name="fileName"/><br/>
- <input type="file" name="fileName"/><br/>
- <input type="file" name="fileName"/><br/>
- <input type="submit" value="上传"/>
- </form>
- </body>
- </html>
---------------------------------------web.xml--------------------------------------------------------------------------------
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.FilterDispatcher
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>*.action</url-pattern>
- </filter-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
-------------------------------------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="false" />
- <!-- 改变struts2默认为2M的上传文件大小限制 -->
- <constant name="struts.multipart.maxSize" value="10240000"/>
- <package name="upload" extends="struts-default">
- <action name="uploadFile" class="com.labci.struts2.action.UploadFileAction">
- <param name="savePath">/upload</param>
- <param name="allowTypes">text/plain,text/xml,text/html,image/gif,image/png,image/jpeg,image/jpg,image/bmp</param>
- <result name="success">index.jsp</result>
- <result name="input">index.jsp</result>
- </action>
- <action name="downloadFile" class="com.labci.struts2.action.DownloadFileAction">
- <param name="savePath">/upload</param>
- <result name="success">index.jsp</result>
- </action>
- </package>
- </struts>
=============================下载========================================================
- /**
- * Struts2Test
- * 文件下载的Action
- */
- package com.labci.struts2.action;
- import java.io.FileInputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.struts2.interceptor.ServletRequestAware;
- import org.apache.struts2.interceptor.ServletResponseAware;
- import com.opensymphony.xwork2.ActionSupport;
- public class DownloadFileAction extends ActionSupport implements
- ServletRequestAware, ServletResponseAware {
- private static final long serialVersionUID = -7448748577778248376L;
- private HttpServletRequest request;
- private HttpServletResponse response;
- private String savePath; //文件上传后保存的路径(在struts.xml中配置,也可在后台定义)
- @Override
- public String execute() throws Exception {
- String fileName=request.getParameter("fileName");---页面请求参数文件名(上传返回页面时指定的)
- String fullPath=getSavePath()+"//"+fileName; //构造文件源的完整路径
- fileName=new String(fileName.getBytes("utf-8"),"iso-8859-1");
- InputStream is=new FileInputStream(fullPath); //构造服务器内存读取源文件的输入流
- int len=0;
- byte []buffers=new byte[1024];
- response.reset();
- response.setContentType("application/x-msdownload"); ---设置文件返回页面的类型
- response.addHeader("Content-Disposition", "attachment;filename=/""+fileName+"/"");---返回的名称
- //把文件内容通过输出流打印到页面上供下载
- while((len=is.read(buffers))!=-1){ //内存读取
- OutputStream os=response.getOutputStream(); //获得输出文件的流
- os.write(buffers, 0, len); //输出
- }
- is.close();
- return SUCCESS;
- }
- public void setServletRequest(HttpServletRequest req) {
- this.request=req;
- }
- public void setServletResponse(HttpServletResponse resp) {
- this.response=resp;
- }
- @SuppressWarnings("deprecation")
- public String getSavePath() {
- return request.getRealPath(savePath);
- }
- public void setSavePath(String savePath) {
- this.savePath = savePath;
- }
- }
---------------------------------------------------------------------------------------------------------
发表评论
-
Tars RPC框架
2018-09-05 20:23 2163腾讯开源服务器框架Tars安装使用 https://w ... -
框架官方手册地址
2018-08-11 12:45 482java手册和API https://docs ... -
Spring boot
2017-10-21 21:46 441Thymeleaf官网:https://www.th ... -
Spring
2017-06-01 17:28 426Spring Batch http://www.c ... -
MVC 表单验证
2017-03-21 11:20 580MVC 表单验证http://elf8 ... -
spring 源码如何导入到eclipse
2016-11-04 17:03 758spring 源码如何导入到eclipse h ... -
SpringMVC----基于注解的简单介绍
2016-05-19 23:09 584SpringMVC是一个基于DispatcherServl ... -
Spring----归纳--亲测
2016-05-12 18:46 574public class User { ... -
Spring---- 2.5配置文件详解
2016-05-11 17:47 623下面我们再 ... -
spring----2.5.6使用总结
2016-05-11 15:45 570http://www.cnblogs.com/zfc220 ... -
spring---- 定时任务的 执行时间设置规则
2015-10-22 17:55 774单纯针对时间的设置规则 org.springframe ... -
Spring----各产品
2015-09-21 22:31 2855Spring IO platform: Sprin ... -
struts2----总结
2014-11-16 21:36 470web服务器tomcat启动 --- ... -
struts2----处理请求
2014-11-16 17:52 5711、客户端发出HTTP请求。 2、根据web.xml ... -
struts2----启动过程
2014-11-16 17:31 822org.apache.struts2.dispatcher ... -
struts2----中 ServletActionContext与ActionContext区别
2014-11-16 16:51 10971. ActionContext 在Struts2开发中 ... -
Struts2----中使用ValueStack、ActionContext、ServletContext、request、session等
2014-11-16 16:22 979声明:本文参考Struts2版本为2.3.1.2,内容仅 ... -
SpringMVC---- 3.0实战指南
2014-10-06 18:29 787http://wenku.baidu.com/view/c ... -
Spring----学习
2014-09-29 23:35 788Spring简介:http://www.ibm.co ... -
SpringMVC和Struts2比较
2014-09-29 23:28 696Servelt规范:filter是一个可以复用的代码 ...
相关推荐
除此之外,Struts2还依赖于其他一些库,如OGNL(Object-Graph Navigation Language)用于表达式语言,Freemarker或Velocity用于视图模板,以及各种插件来支持特定的功能,如文件上传、JSON处理等。 在标签中提到了...
其中,文件上传和下载功能是Struts2标签库的一个亮点,不仅易于学习,而且非常实用。 #### 标签库分类 Struts2标签库大致可以分为以下几类: - **用户界面标签库(UI标签库)**:主要用于处理与用户交互有关的...
"struts2-apps.rar"这个压缩包文件包含了多个示例项目,可以帮助学习者深入理解Struts2框架的工作原理和实践应用。 1. **Struts2框架核心概念**: - **Action类**:在Struts2中,Action类是业务逻辑的主要载体,它...
优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建目录,防止文件因为目录不存在,导致上传失败。 2018-08-24: 增加S2-057 Struts 2.3 to 2.3.34,...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。在Struts2中处理文件上传和下载是常见的需求,对于构建交互式的Web应用来说至关重要。以下将详细介绍Struts2中如何实现这两个...
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
在Struts2中,实现文件上传并不复杂,但需要理解其背后的原理和配置。以下是对"完整Struts2文件上传示例"的详细解释: 1. **配置Struts2框架** 在Struts2中,我们首先需要在`struts.xml`配置文件中添加相关的拦截...
总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...
总的来说,Struts2的多文件上传通过引入Apache Commons库,提供了简洁的API和配置,使得开发者能轻松处理用户上传的多个文件。无论是使用List集合还是数组,核心原理都是相同的,只是接收上传文件的对象类型不同。...
本项目主要展示了如何在Struts2框架下实现单个文件和多个文件的上传及下载,并且运用了多个拦截器来增强功能和安全性。 首先,让我们详细了解一下文件上传的过程。在Struts2中,文件上传主要依赖于`struts2-...
在Struts2框架中,实现文件上传需要进行一系列配置和编程。下面我们将深入探讨Struts2文件上传的配置和实现。 首先,为了支持文件上传,我们需要在Struts2的核心配置文件`struts.xml`中添加相应的拦截器。Struts2...
最后,Struts2作为一个成熟的框架,提供了强大的表单验证、国际化、文件上传下载等功能,而且社区活跃,拥有丰富的文档和示例,对于快速构建Java web应用非常有帮助。但随着技术的发展,Spring Boot等现代框架的兴起...
4. **插件增强**:Struts2支持丰富的插件体系,例如Freemarker模板引擎、JSON支持、文件上传下载等。Struts2.3.4版本可能增强了某些插件的功能或兼容性。 5. **配置简化**:框架可能对配置文件进行了改进,使得配置...
Struts2可以与之集成,处理大文件上传和多文件上传,提供更高级的功能,如分块上传、断点续传等。 7. **服务器端文件存储**:上传的图片需要在服务器上存储,可以选择临时目录、特定的上传目录或数据库。存储策略...
总结来说,这个压缩包可能包含的是一个关于如何识别、利用以及防御Struts2 S2-045漏洞和任意文件上传攻击的工具或者示例代码。对于开发人员和系统管理员来说,理解并掌握这些知识有助于提高系统的安全性,防止潜在的...
这个“Struts2 文件上传和下载示例程序”是一个演示如何在Struts2中实现这两个功能的实例。 文件上传是Web应用程序中的一项重要功能,允许用户从本地计算机选择文件并将其传输到服务器。在Struts2中,这一过程涉及...
在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...
本示例将详细介绍如何在Struts2框架下实现单一文件上传、多文件上传以及文件下载功能。 1. 单一文件上传: 在Struts2中,我们可以使用`org.apache.struts2.interceptor.FileUploadInterceptor`拦截器来处理文件...
总之,Struts2文件上传程序示例是一个实用的教学资源,它涵盖了文件上传的基本流程和关键配置,包括前端表单设计、后端Action处理、配置文件设置等。对于初学者来说,这是一个很好的起点,可以深入理解MVC框架中文件...
在这个"Struts文件上传示例"中,我们将深入探讨如何在Struts框架下实现文件上传功能,以及相关的关键知识点。 首先,理解文件上传的基本流程至关重要。在Web应用中,用户通过表单选择本地文件,然后提交到服务器。...