文件的上传下载是 Web 开发中老生常谈的功能,基于 Struts2 框架对于实现这一功能,更是能够给我们带来很多的便利。Struts2 已经有默认的 upload 拦截器。我们只需要写参数,它就会自动帮我们封装好。这篇我们就先来看一下基于 Struts2 的单文件和多文件上传。

一、 单文件上传

1.1 导 jar 包

commons-fileupload-1.3.jar

commons-io-2.0.1.jar

commons-logging-1.1.3.jar

freemarker-2.3.19.jar

ognl-3.0.6.jar

struts2-core-2.3.15.3.jar

xwork-core-2.3.15.3.jar

1.2 web.xml 配置 Struts2 核心过滤器

 <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>/*</url-pattern>
</filter-mapping>

1.3 JSP 文件上传页(注意 file 的 name 属性一定要与 Action 里面的 File 类型属性名一致)

 <!-- 文件上传的必要前提:
1.请求方式必须是post
2.enctype属性的取值必须是multipart/form-data
3.提供一个文件选择域 文件上传
--> <s:form action="upload.action" enctype="multipart/form-data"> <s:file name="myfile" label="请选择文件"></s:file>
<s:submit value ="提交"></s:submit> </s:form>

1.4 实现文件上传的 UploadAction

 package com.fhcq.action;

 import java.io.File;
import javax.servlet.ServletContext;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { //表单上提供的字段
private File myfile;
//struts2在文件上传时提供的属性
private String myfileFileName;//上传的文件名。上传字段名称+FileName 注意大小写
private String myfileContentType;//上传文件的MIME类型。上传字段名称+ContentType 注意大小写
public String upload (){ //1.拿到ServletContext
ServletContext servletContext = ServletActionContext.getServletContext();
//2.调用realPath方法,获取根据一个虚拟目录得到的真实目录
String realPath = servletContext.getRealPath("/WEB-INF/file");
//3.如果这个真实的目录不存在,需要创建
File file = new File(realPath );
if(!file.exists()){
file.mkdirs();
}
//4.把文件存过去
//拷贝:把文件的临时文件复制到指定的位置。注意:临时文件还在
//FileUtils.copyFile(myfile, new File(file,myfileFileName)); //剪切:把临时文件剪切指定的位置,并且给他重命名。 注意:临时文件没有了
myfile.renameTo(new File(file,myfileFileName));
return SUCCESS;
} public File getMyfile() {
return myfile;
} public void setMyfile(File myfile) {
this.myfile = myfile;
} public String getMyfileFileName() {
return myfileFileName;
} public void setMyfileFileName(String myfileFileName) {
this.myfileFileName = myfileFileName;
} public String getMyfileContentType() {
return myfileContentType;
} public void setMyfileContentType(String myfileContentType) {
this.myfileContentType = myfileContentType;
} }

1.5 配置 struts.xml(注意:修改文件上传的总的大小。)

 <struts>
<!--constant修改struts2的默认配置值 -->
<!--修改struct2称为开发模式,修改配置之后会自动加载 -->
<constant name="struts.devMode" value="true" />
<!-- 限制上传文件的大小,第一种方式:通过修改struts2的常量。
在default.properties中配的struts.multipart.maxSize=2097152-->
<constant name="struts.multipart.maxSize" value="4097152" /> <package name="p1" extends="struts-default"> <action name ="upload" class = "com.fhcq.action.UploadAction" method="upload"> <!-- 第二种方式:通过给fileUpload的拦截器注入参数的形式,控制上传文件的大小
无法使用 <param name="fileUpload.maximumSize">31457280</param>-->
<interceptor-ref name="defaultStack">
<!-- 限制上传文件的扩展名。如果有多个,使用逗号分隔
<param name="fileUpload.allowedExtensions">jpg,png,bmp</param>-->
<!-- 限制上传文件的MIME类型。 如果有多个,使用逗号分隔 -->
<param name="fileUpload.allowedTypes">image/jpg,image/pjpeg,image/png
</param>
</interceptor-ref>
<result>/index.jsp</result>
<result name="input" type="redirect">/upload.jsp</result>
</action> </package> </struts>

1.6 配置 fileupload_message.properties,放置在 src 下用来显示错误的资源文件信息

 struts.messages.error.content.type.not.allowed=\u4E0A\u4F20\u6587\u4EF6\u7684\u7C7B\u578B\u4E0D\u662F\u88AB\u652F\u6301\u7684: {0} "{1}" "{2}" {3}

二、 多文件上传

在以上单文件上传的基础上,修改内容如下:

2.1 JSP 文件上传页(注意 file 的 name 属性一定要与 Action 里面的 File 类型属性名一致)

 <!-- 文件上传的必要前提:
1.请求方式必须是post
2.enctype属性的取值必须是multipart/form-data
3.提供一个文件选择域
--> <s:form action="upload.action" enctype="multipart/form-data"> <s:file name="myfile" label="请选择文件"></s:file>
<s:file name="myfile" label="请选择文件"></s:file>
<s:submit value ="提交"></s:submit> </s:form>

2.2 实现文件上传的 UploadAction

 package com.fhcq.action;

 import java.io.File;

 import javax.servlet.ServletContext;

 import org.apache.struts2.ServletActionContext;

 import com.opensymphony.xwork2.ActionSupport;

 public class UploadAction extends ActionSupport  {

 	//表单上提供的字段
private File[] myfile;
//struts2在文件上传时提供的属性
private String[] myfileFileName;上传的文件名。上传字段名称+FileName 注意大小写
private String[] myfileContentType;//上传文件的MIME类型。上传字段名称+ContentType 注意大小写 public String upload (){ //1.拿到ServletContext
ServletContext servletContext = ServletActionContext.getServletContext();
//2.调用realPath方法,获取根据一个虚拟目录得到的真实目录
String realPath = servletContext.getRealPath("/WEB-INF/files");
//3.如果这个真实的目录不存在,需要创建
File file = new File(realPath );
if(!file.exists()){
file.mkdirs();
}
//4.把文件存过去
//剪切:把临时文件剪切指定的位置,并且给他重命名。 注意:临时文件没有了
for(int i=0;i<myfile.length;i++){
myfile[i].renameTo(new File(file,myfileFileName[i]));
} return SUCCESS;
} public File[] getMyfile() {
return myfile;
} public void setMyfile(File[] myfile) {
this.myfile = myfile;
} public String[] getMyfileFileName() {
return myfileFileName;
} public void setMyfileFileName(String[] myfileFileName) {
this.myfileFileName = myfileFileName;
} public String[] getMyfileContentType() {
return myfileContentType;
} public void setMyfileContentType(String[] myfileContentType) {
this.myfileContentType = myfileContentType;
} }

基于 Struts2 的单文件和多文件上传的更多相关文章

  1. ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案

    摘要: ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案 在struts2应用中使用ueditor富文本编辑器上传图片或者附件时,即使配置 ...

  2. c# 模拟表单提交,post form 上传文件、大数据内容

    表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每 ...

  3. c# 模拟表单提交,post form 上传文件、数据内容

    转自:https://www.cnblogs.com/DoNetCShap/p/10696277.html 表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipar ...

  4. 求大师点化,寻求大文件(最大20G左右)上传方案

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  5. PHP之文件的锁定、上传与下载

    小结文件的锁定机制.上传和下载 1.文件锁定 现在都在讲究什么分布式.并发等,实际上文件的操作也是并发的,在网络环境下,多个用户在同一时刻访问页面,对同一服务器上的同一文件进行着读取,如果,这个用户刚 ...

  6. SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html

    SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html 说明: 1.环境:SpringMVC+Spring+Tomcat7+JDK1.7 2.支持 zip和rar格式的压 ...

  7. android中的文件(图片)上传

    android中的文件(图片)上传其实没什么复杂的,主要是对 multipart/form-data 协议要有所了解. 关于 multipart/form-data 协议,在 RFC文档中有详细的描述 ...

  8. JS代码实用代码实例(输入框监听,点击显示点击其他地方消失,文件本地预览上传)

    前段时间写前端,遇到一些模块非常有用,总结以备后用 一.input框字数监听 <!DOCTYPE html> <html lang="en"> <he ...

  9. [html5+java]文件异步读取及上传核心代码

    html5+java 文件异步读取及上传关键代码段 功能: 1.多文件文件拖拽上传,file input 多文件选择 2.html5 File Api 异步FormData,blob上传,图片显示 3 ...

随机推荐

  1. Linux入门,这七大习惯得有!

    对于很多Linux初学者来说,在刚开始使用Linux系统时会感到很多不适.这里为大家整理了自己以前Linux入门时别人告诉我的七个习惯.我相信如果你运用了这七个习惯,在你使用Linux时你会感觉更安全 ...

  2. js判断当前浏览器是pc端还是移动端

    根据用户的访问设备的不同来显示不同的页面样式,主要是判断移动设备还是电脑浏览器访问的. 下面给出js判断处理代码,以作参考. <script type="text/javascript ...

  3. bzoj千题计划159:bzoj2055: 80人环游世界(有源汇上下界可行最小费用流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2055 某个国家必须经过vi次, 可以转化为上下界都为vi的边 对这张图做有源汇上下界可行最小费用流 ...

  4. PHP7 学习笔记(二)PHP5.9 升级到PHP7 遇到的一些坑的记录(php-fpm 图解)

    apache_event_php-fpm 示意图: nginx-php-fpm示意图: Worker-Master-Server TCP-Nginx_PHP Nginx-FastCGI 1.使用$_G ...

  5. zz图像卷积与滤波的一些知识点

    Xinwei: 写的通俗易懂,终于让我这个不搞CV.不搞图像的外行理解卷积和滤波了. 图像卷积与滤波的一些知识点 zouxy09@qq.com http://blog.csdn.net/zouxy09 ...

  6. 微信 js-sdk

    使用方法 http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html Demo http://203.195.235.7 ...

  7. idea插件安装的通用操作

    序:今天下午看到一个bug,很神奇,粘出来大家看看 看到这个异常栈,有经验的或者查到的答案都是mapper.xml中哪个的方法配置错了,应替换parameterMap为parameterType, 奇 ...

  8. Swift动态添加UIImageView并添加事件

    Swift动态添加UIImageView并添加事件: 1. 创建UIImageView实例,并进行初始化 2. 设置UIImageView的用户交互属性userInteractionEnabled为T ...

  9. 20155227 2016-2017-2 《Java程序设计》第四周学习总结

    20155227 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 继承 继承 继承是Java程序设计语言面向对象的又一重要体现,允许子类继承父类,避免重复的行 ...

  10. Google Congestion Control介绍

    随着网络带宽的日益增加和便携式设备,如智能手机或平板电脑处理能力的增强,基于互联网的实时通信已经成为热点. 虽然视频会议已商用了多年,特别是SKYPE这样的视频应用在互联网上已有10年时间,但针对实时 ...