- 其他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;
- }
- }
- 浏览: 499302 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 2117腾讯开源服务器框架Tars安装使用 https://w ... -
框架官方手册地址
2018-08-11 12:45 448java手册和API https://docs ... -
Spring boot
2017-10-21 21:46 406Thymeleaf官网:https://www.th ... -
Spring
2017-06-01 17:28 396Spring Batch http://www.c ... -
MVC 表单验证
2017-03-21 11:20 539MVC 表单验证http://elf8 ... -
spring 源码如何导入到eclipse
2016-11-04 17:03 728spring 源码如何导入到eclipse h ... -
SpringMVC----基于注解的简单介绍
2016-05-19 23:09 553SpringMVC是一个基于DispatcherServl ... -
Spring----归纳--亲测
2016-05-12 18:46 546public class User { ... -
Spring---- 2.5配置文件详解
2016-05-11 17:47 587下面我们再 ... -
spring----2.5.6使用总结
2016-05-11 15:45 535http://www.cnblogs.com/zfc220 ... -
spring---- 定时任务的 执行时间设置规则
2015-10-22 17:55 729单纯针对时间的设置规则 org.springframe ... -
Spring----各产品
2015-09-21 22:31 2826Spring IO platform: Sprin ... -
struts2----总结
2014-11-16 21:36 438web服务器tomcat启动 --- ... -
struts2----处理请求
2014-11-16 17:52 5381、客户端发出HTTP请求。 2、根据web.xml ... -
struts2----启动过程
2014-11-16 17:31 799org.apache.struts2.dispatcher ... -
struts2----中 ServletActionContext与ActionContext区别
2014-11-16 16:51 10731. ActionContext 在Struts2开发中 ... -
Struts2----中使用ValueStack、ActionContext、ServletContext、request、session等
2014-11-16 16:22 938声明:本文参考Struts2版本为2.3.1.2,内容仅 ... -
SpringMVC---- 3.0实战指南
2014-10-06 18:29 721http://wenku.baidu.com/view/c ... -
Spring----学习
2014-09-29 23:35 728Spring简介:http://www.ibm.co ... -
SpringMVC和Struts2比较
2014-09-29 23:28 663Servelt规范:filter是一个可以复用的代码 ...
相关推荐
struts2中的文件上传和下载示例 struts2中的文件上传和下载示例 struts2中的文件上传和下载示例
优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建目录,防止文件因为目录不存在,导致上传失败。 2018-08-24: 增加S2-057 Struts 2.3 to 2.3.34,...
最近在做struts2的学习研究,这里共享一份完整能运行的示例
基于struts2实现了单一文件上传,多文件上传和文件下载的功能.
增加S2-048 Struts 2.3.X 支持检查官方示例struts2-showcase应用的代码执行漏洞,参考地址:http://127.0.0.1:8080/struts2-showcase/integration/saveGangster.action 2017-03-21: 增加S2-046,官方发布S2-046和S2...
struts 上传文件的示例,是一个myeclipse工程
本程序为struts2文件是上传程序。解压后就可以使用。程序比较简单适合于初学者。奔驰呢工序仅供参考。严禁用于其他用途
Struts2下多文件的上传与下载,包含详细的示例
struts2 文件上传和下载示例程序 http://blog.csdn.net/zhiweiv/archive/2008/10/13/3070610.aspx
文件上传代码示例,使用了struts,简单易懂
自己使用struts2写的一个文件上传示例代码,可以实现对文件的大小控制、格式控制等,里面注释写得比较详细,给大家分享一下子
有对漏洞的命令执行功能、文件上传功能。还有批量验证功能。增加S2-046,官方发布S2-046和S2-045漏洞引发原因一样,只是利用漏洞的位置发生了变化,S2-046方式可能绕过部分WAF防护,存在S2-045就存在S2-046。增加S2-...
struts2 + uploadify上传文件示例
增加S2-048 Struts 2.3.X 支持检查官方示例struts2-showcase应用的代码执行漏洞,参考地址:http://127.0.0.1:8080/struts2-showcase/integration/saveGangster.action 2017-03-21: 增加S2-046,官方发布S2-046和S2...
利用Struts2实现的文件上传和下载,可以实现多文件上传,下载有管控。仅示例代码,高手勿看!
Struts1.x的上传文件示例。Struts1.x的教程参考我的Blog:http://blog.csdn.net/boyazuo
Struts2 文件 多文件上传下载 示例 ,如何获取真实的上传文件名的规则,部署后就可用,工程中包含所有jar包
在我的随笔Extjs Tree + JSON + Struts2中我介绍了如何异步加载一个Extjs的树,但是很多网友留言说不能成功操作。现在我自己做了一个所有源代码的包,供大家下载。 有几点事项请大家注意 1、blogjava的文件上载要求...
struts2文件上传,包含了单个文件上传和多文件上传的代码示例