1、单文件上传

单文件上传步骤:

1)创建上传jsp页面

文件上传的表单提交方式必须是POST方式,编码类型:enctype="multipart/form-data",默认是 application/x-www-form-urlencoded,比如:

 <form action="${pageContext.servletContext.contextPath}/uploadAction.action" enctype="multipart/form-data" method="post"> 

2)创建处理文件上传Action类

  • 在Action类中声明相关属性:

    • 要声明与页面中表单name属性同名的属性,同名的属性的类型是File类型,该属性用来保存临时文件;
    • 要声明[同名的属性]ContentType属性,类型是String类型,该属性表示上传文件的类型;
    • 要声明[同名的属性]FileName属性,类型是String类型,该文件表示要上传的文件;
    • 给所有属性提供get和set方法。
  • 在Action类中提供处理上传的方法:
    • 获取要保存文件的位置;
    • 在目标文件夹内,创建一个与上传文件同名的文件;
    • 通过FileUtils工具类提供copyFile()方法,将临时文件内容拷贝到目标文件夹下的那个同名的文件;
    • 调用保存临时文件的属性的delete()方法删除临时文件(也就是File类型属性的delete方法)。

3)配置struts.xml文件

  • 设置上传文件大小,Struts2默认上传文件总大小为2MB,超过文件总大小,跳转input视图,通过<s:actionError /> 回显错误信息,在struts.xml 设置上传总大小:

     <constant name="struts.multipart.maxSize" value="20000000"></constant>

    设置上传文件总大小,对所有上传form有效,只想对当前form进行设置,可以设置fileUpload拦截器属性

  • 在fileUpload拦截器中有三个属性:
    • protected Long maximumSize:可以设置每一个上传文件的大小
    • protected Set<String> allowedTypesSet:设置允许上传文件的类型
    • protected Set<String> allowedExtensionsSet:设置允许的上传文件的后缀名

可以在struts.xml文件中配置这些属性:

 <interceptor-ref name="defaultStack">
<!--配置上传文件的大小,这里配置的是上传文件的单个大小-->
<param name="fileUpload.maximumSize">20971520</param>
<!-- 配置上传文件允许的类型-->
<param name="fileUpload.allowedTypes">text/plain,application/msword</param>
<!-- 配置上传文件的扩展名-->
<param name="fileUpload.allowedExtensions">.txt,.doc</param>
</interceptor-ref>

允许的类型(allowedTypes)和允许的扩展名(allowedExtensions)必须保持一致。

单文件上传示例:

1)创建jsp页面

 <body>
<form action="${pageContext.servletContext.contextPath}/uploadAction.action" enctype="multipart/form-data" method="post">
上传文件:<input type="file" name="upload">
<input type="submit" value="上传">
</form>
</body>

2)创建Action类

 public class UploadAction extends ActionSupport {
private File upload;
private String uploadContentType;
private String uploadFileName; public File getUpload() {
return upload;
} public void setUpload(File upload) {
this.upload = upload;
} public String getUploadContentType() {
return uploadContentType;
} public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
} public String getUploadFileName() {
return uploadFileName;
} public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
} @Override
public String execute() throws Exception {
ServletContext sc = ServletActionContext.getServletContext();
//获取要保存文件的位置
String path = sc.getRealPath("/upload");
//创建一个与上传文件同名的文件
File file = new File(path, uploadFileName);
//将临时文件内容拷贝到目标文件夹下的那个同名的文件
FileUtils.copyFile(upload, file);
//删除临时文件
upload.delete();
return SUCCESS;
}
}

3)配置struts.xml文件

 <struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.multipart.maxSize" value="200000000"/>
<package name="default" namespace="/" extends="struts-default">
<action name="uploadAction" class="com.sunny.action.UploadAction">
<result>/success.jsp</result>
<result name="input">/error.jsp</result>
<interceptor-ref name="defaultStack">
<param name="fileUpload.maximumSize">20971520</param>
<param name="fileUpload.allowedTypes">text/plain,application/msword</param>
<param name="fileUpload.allowedExtensions">.txt,.doc</param>
</interceptor-ref>
</action>
</package>
</struts>

4)上传文件界面

5)上传成功后会跳转到success.jsp页面

6)项目下的upload文件夹下会有上传的文件

上传问题信息国际化

Struts2上传问题信息默认的文件为在struts-message.properties下:

 struts.messages.error.uploading=Error uploading: {0}
struts.messages.error.file.too.large=File too large: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed=Content-Type not allowed: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed=File extension not allowed: {0} "{1}" "{2}" {3}

要想实现中文显示,需要在Action类相同文件下创建ActionClassName.properties文件,其中ActionClassName为上传Action类的类名,文件内容修改为:

 struts.messages.error.uploading=上传错误: {0}
struts.messages.error.file.too.large=上传文件太大: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed=上传文件的类型不允许: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed=上传文件的后缀名不允许: {0} "{1}" "{2}" {3}

等号前面的内容固定,后面的内容可以自己写。

2、多文件上传

多文件上传的所有流程与单文件上传一致,但是需要注意的是:

  • 在页面中,虽然是多文件上传,但是页面中表单的name属性的值必须保持一致;
  • 在Action类中声明的相关属性,类型改成数组或者集合;
  • 在业务方法中,相关处理流程改成单文件上传的循环。

单文件上传示例:

1)创建jsp页面

 <body>
<form action="${pageContext.servletContext.contextPath}/uploadAction.action" enctype="multipart/form-data" method="post">
上传文件:<input type="file" name="upload"><br>
上传文件:<input type="file" name="upload"><br>
上传文件:<input type="file" name="upload"><br>
上传文件:<input type="file" name="upload"><br>
<input type="submit" value="上传">
</form>
</body>

2)创建Action类

 public class UploadAction extends ActionSupport {
private File[] upload;
private String[] uploadContentType;
private String[] uploadFileName; public File[] getUpload() {
return upload;
} public void setUpload(File[] upload) {
this.upload = upload;
} public String[] getUploadContentType() {
return uploadContentType;
} public void setUploadContentType(String[] uploadContentType) {
this.uploadContentType = uploadContentType;
} public String[] getUploadFileName() {
return uploadFileName;
} public void setUploadFileName(String[] uploadFileName) {
this.uploadFileName = uploadFileName;
} @Override
public String execute() throws Exception {
ServletContext sc = ServletActionContext.getServletContext();
//获取要保存文件的位置
String path = sc.getRealPath("/upload");
//创建一个与上传文件同名的文件
for (int i = 0; i < upload.length; i++) {
File file = new File(path, uploadFileName[i]);
//将临时文件内容拷贝到目标文件夹下的那个同名的文件
FileUtils.copyFile(upload[i], file);
//删除临时文件
upload[i].delete();
}
return SUCCESS;
}
}

3)配置struts.xml文件,和单文件上传的配置一样

 <struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.multipart.maxSize" value="200000000"/>
<package name="default" namespace="/" extends="struts-default">
<action name="uploadAction" class="com.sunny.action.UploadAction">
<result>/success.jsp</result>
<result name="input">/error.jsp</result>
<interceptor-ref name="defaultStack">
<param name="fileUpload.maximumSize">20971520</param>
<param name="fileUpload.allowedTypes">text/plain,application/msword</param>
<param name="fileUpload.allowedExtensions">.txt,.doc</param>
</interceptor-ref>
</action>
</package>
</struts>

4)上传文件界面

5)上传成功后会跳转到success.jsp页面

6)项目下的upload文件夹下会有上传的文件

3、文件下载

Struts2学习笔记(十一)——文件上传的更多相关文章

  1. SpringMVC:学习笔记(8)——文件上传

    SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...

  2. Django:学习笔记(8)——文件上传

    Django:学习笔记(8)——文件上传 文件上传前端处理 本模块使用到的前端Ajax库为Axio,其地址为GitHub官网. 关于文件上传 上传文件就是把客户端的文件发送给服务器端. 在常见情况(不 ...

  3. springmvc学习笔记--支持文件上传和阿里云OSS API简介

    前言: Web开发中图片上传的功能很常见, 本篇博客来讲述下springmvc如何实现图片上传的功能. 主要讲述依赖包引入, 配置项, 本地存储和云存储方案(阿里云的OSS服务). 铺垫: 文件上传是 ...

  4. Javaweb学习笔记10—文件上传与下载

    今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容.       ...

  5. go web 第二天 学习笔记之文件上传

    package main import ( "crypto/md5" "fmt" "html/template" "io" ...

  6. SpringMVC学习笔记八:文件上传及多个文件上传

    SpringMVC实现文件上传需要加入jar包,commons-fileupload-1.3.1.jar,commons-io-2.2.jar 项目目录树: pom.xml加入需要的包 <pro ...

  7. Laravel 学习笔记之文件上传

    自定义添加磁盘——upload 位置:config/filesystems.php 'disks' => [ 'local' => [ 'driver' => 'local', 'r ...

  8. java学习笔记 (6) —— 文件上传

    1.新建upload.jsp <%@ page language="java" import="java.util.*" pageEncoding=&qu ...

  9. django学习笔记 多文件上传

    习惯了flask 再用django 还是不太习惯  好麻烦 配置文件也忒多了 不过还是要学的 之前只能一个一个文件长传,这次试试多个文件 不适用django的forms创建表单 直接在html中使用 ...

随机推荐

  1. CJOJ 1131 机器分配 / Luogu 2066 机器分配 (动态规划)

    CJOJ 1131 机器分配 / Luogu 2066 机器分配 (动态规划) Description Luogu: 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国 ...

  2. Python基础之常用模块(二)

    一.sys模块 1.sys.exit() 退出程序,这是正常退出程序,与之前用的break不同的是,break只是退出循环,循环之后的代码还会正常运行 2.sys.argv  会返回一个列表,列表中的 ...

  3. Java条件查询涉及到时分秒

    关于Oralce数据库 的日期时间查询: 下面我们先来看一组日期数据 表:myDate 列:time; 1998-8-7 23:45:33.3 1998-8-7 11:22:21.5 1998-8-7 ...

  4. python 图形界面开发

    用python来开发图形界面,确实不是很方便,没有c#,Java,甚至VB来得容易.几个控件拖拽,然后响应事件. 用python写脚本,或者web service来处理一般工作,绰绰有余.但有的时候, ...

  5. 【TOP】top命令的load average的意义

    一. 怎么查看机器负载 uptime 命令: $uptime 14:32:32 up 108 days, 23:04, 17 users,  load average: 0.06, 0.08, 0.0 ...

  6. 共享---samba

    1.  虚拟机,可以采用共享文件夹 2.  windows之间可以使用网络邻居共享 3.  windows与linux,linux与linux之间建立samba服务器 4.  安装samba服务器 r ...

  7. rabbitMQ教程(二)一篇文章看懂rabbitMQ

    一.rabbitMQ是什么: RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上. 学过websocket的来理解rabbitMQ应该是 ...

  8. HTML基础知识(未完待续)

    一.HTML编辑工具:Sublime Text 二.HTML实体字符:1.( 空格):&nbsp: 2.(<) &lt: 3.(>)&gt: 4.(&)&a ...

  9. SLAM中的优化理论(二)- 非线性最小二乘

    本篇博客为系列博客第二篇,主要介绍非线性最小二乘相关内容,线性最小二乘介绍请参见SLAM中的优化理论(一)-- 线性最小二乘.本篇博客期望通过下降法和信任区域法引出高斯牛顿和LM两种常用的非线性优化方 ...

  10. year:2017 month:7 day:20

    2017-07-20 JavaScript(Dom) 1:获取节点对象 document.getElementById("html元素的id") document.getEleme ...