struts2中实现文件的上传

文件上传的action,同时过滤上传的文件格式只对满足要求的格式支持上传

package com.inspur.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
private String title;
private File upload;
private String uploadFileName;
private String uploadContentType;
private String savePath;
private String allowTypes;

public String getAllowTypes() {
return allowTypes;
}
public void setAllowTypes(String allowTypes) {
this.allowTypes = allowTypes;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getSavePath() {
return ServletActionContext.getRequest().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String filterType(String[]types){
String fileType=this.getUploadContentType();
for(String type:types){
if(type.equals(fileType)){
return null;
}

}
return INPUT;
}
public String upload()throws Exception{
if(this.getAllowTypes()==null){
System.out.println("lzhq");
}

String filterResult=this.filterType(this.getAllowTypes().split(","));
if(filterResult!=null){
ActionContext.getContext().put("typeError", "this file you want to upload is error");
return filterResult;
}
FileOutputStream fos=new FileOutputStream(this.getSavePath()+"\\"+this.getUploadFileName());
FileInputStream fis=new FileInputStream(this.getUpload());
byte[]buffer=new byte[1024];
int len=0;
while((len=fis.read(buffer))>0){
fos.write(buffer,0,len);
}
return SUCCESS;
}

}

在struts.xml文件中提供上传文件保存路径的动态配置和允许的文件上传格式的动态配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="message"></constant>
<constant name="struts.i18n.encoding" value="gbk"></constant>
<package name="upload" extends="struts-default" namespace="/">
<action name="upload" class="com.inspur.action.UploadAction" method="upload">
<param name="allowTypes">image/bmp,image/png,image/gif,image/jpeg</param>
<param name="savePath">/upload</param>
<result name="success">/success.jsp</result>
<result name="input">/upload.jsp</result>
</action>
</package>

</struts>

上传成功的转向页面:

<body>
上传的文件标题是:<s:property value="title"/><br/>
上传的图片是: <img alt="upload" src="<s:property value="'upload/'+uploadFileName"/>"/>
</body>

文件上传页面jsp文件:

<body>
${requestScope.typeError }
<form action="upload.action" method="post" name="uploadForm" enctype="multipart/form-data">
文件标题:<input type="text" name="title"/><br/>
选择文件:<input type="file" name="upload"/><br/>
<input type="submit" value="upload"/>
</form>

</body>

在web.xml配置文件中添加如下代码:

<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

其中org.apache.struts2.dispatcher.ActionContextCleanUp类与文件的上传无关,但是在文件上传的应用中会出现无法预测的异常,添加该过滤器后异常消失。本身org.apache.struts2.dispatcher.ActionContextCleanUp类就是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter类的辅助类,此处只是出于系统稳定性的考虑,与应用的文件上传功能没有直接的关系。

注意:struts2的文件上传默认使用的是common-fileupload和common-io文件上传 框架,所以需要导入对应的jar包,另外保存上传文件的文件夹应该是在webRoot目录下,而不是在src目录下,经过编译后部署到tomcat中的程序只是webRoot中的经过编译的class文件和所有的jsp,jar,properties,xml等文件而不会包含src文件,所以应该将upload文件夹建在webRoot目录下。

posted on 2013-04-16 22:37 moonfans 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/moonfans/archive/2013/04/16/3025186.html

struts2中实现文件的上传相关推荐

  1. struts2 实现多文件限制上传

    struts2的文件上传特别简单,把我做的小例子给大家看一下 upload.jsp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2 ...

  2. asp.net中实现文件批量上传

    今天BOSS要求做一个批量上传文件的功能,忙活了半天,总算搞定,希望前辈们多加指点,下面来看一下效果图(这里是简化版,只介绍了主要实现过程,没有美化,勿怪!勿怪!): 单击添加文件,将自动添加File ...

  3. python3-开发进阶补充Django中的文件的上传

    PS:这段时间有点不在状态,刚刚找回那个状态,那么我们继续曾经的梦想 今天我们来补充一下文件的上传的几种方式: 首先我们先补充的一个知识点: 一.请求头ContentType: ContentType ...

  4. 表单和servlet在idea中实现文件的上传

    1.前端jsp的搭建. 通过type=file的input标签就可以选择要上传的文件,当submit提交表单的时候就可以将选定的文件以流的形式提交.要注意的技术细节就是表单中有上传文件功能时,必须显式 ...

  5. linux中操作文件的上传和下载

    获取权限 进入linux中,可以先获取操作权限,防止无权操作: sudo -i 然后回车 进入相应的目录下 cd /data/xxxxx 然后回车 上传文件 rz 然后回车 页面会有个弹窗让你选择需要 ...

  6. asp.net中有关文件HTTP上传服务器保存的问题(捷易拍sdk开发方面)

    我们都知道,一般客户端文件上传服务器有两种方法:HTTP上传和FTP上传两种.两种上传方式以捷易拍SDK为例: 1.HTTP上传: /********************************* ...

  7. java struts2下载文件_Struts2下多文件的上传与下载

    Struts2下多文件的上传与下载 目录 多文件 上传 下载 随意文件java Struts2单例 配置 动态读取 李顺利 在网络上,对于Java处理文件上传和下载的技术比较多,而Struts作为一款 ...

  8. BS文件夹上传操作(二) ——基本功能实现

    上篇<BS文件夹上传操作 >大概说明了我所需要的需求, 接着上次的命题:  "如果有一个需求,要求你在BS上实现文件夹上传操作功能?你该如何实现?" ActiveX?J ...

  9. MultipartFile(文件的上传)--CommonsMultipartResolver

    转自:https://www.cnblogs.com/896240130Master/p/6430908.html SpringMVC 中,文件的上传,是通过 MultipartResolver 实现 ...

最新文章

  1. 使用R语言分析微信好友
  2. 解决Linux下MySQL启动错误Starting MySQL.Manager of pid-file quit without updating file.[FAILED]...
  3. Java Web应用的生命周期
  4. CUBA 7的新功能
  5. python地图散点图_在地图上叠加散点图(img)
  6. python安装lap_一个python脚本解决安装mq的依赖问题
  7. Rust 算法排位记 - 插入排序的图示和代码实现
  8. 解决重启VCSA 6.0,访问vsphere web client提示:503 Service Unavailable错误
  9. LoadRunner的Oracle计数器
  10. Opencv3 Robert算子 Sobel算子 拉普拉斯算子 自定义卷积核——实现渐进模糊
  11. 让ubuntu在一个窗口下打开多个终端的软件——terminator
  12. PHP一个文件内多个php代码段的写法
  13. AR地图与虚拟现实技术
  14. 大话2虚拟服务器怎么弄,大话西游2公益服风云1.0虚拟机镜像手工启动服务端+启动教程+客户端IP修改教程+数据库工具...
  15. Flask 数据库迁移(详解)
  16. wav转mp3的最简单方法
  17. 逆向app - 简单apk工具的安装
  18. 手把手教你扩展个人微信号(2)
  19. 基于药效团的药物设计(Pharmacophore Construction)
  20. Linux 中有效用户组和初始用户组

热门文章

  1. 【C#】获取网页内容及HTML解析器HtmlAgilityPack的使用
  2. 【编程之美】2.21 只考加法的面试题
  3. [原创 - 尚学堂科技 - 马士兵老师]
  4. s11.1 lsof:查看进程打开的文件
  5. 7.1 useradd:创建用户
  6. python 真多线程_Python之路200个小例子,在线网页版来了,从此学习更方便!
  7. 「技术人生」:技术同学应该如何理解业务?
  8. Duang,钉钉会议室预定系统已上线!
  9. AICompiler动态shape编译框架案例和效果数据
  10. Dubbo 版 Swagger 来啦!