Struts2 提供了更为简便的文件上传机制,将文件上传的复杂操作都封装到commons-fileupload.jar 、commons-io.jar两个jar包中,然后再程序中使用简单的几句代码就能实现文件上传;

HTML:

<form action="${pageContext.request.contextPath}/hello/upload_uploadImage.do" enctype="multipart/form-data" method="post">
图片:<input type="file" name="image" />
<input type="submit" value="上传" />
</form>

Struts.xml:

<action name="upload_*" class="com.actions.UploadAction" method="{1}">
<result name="message">/WEB-INF/message.jsp</result>
</action>

action:

import java.io.File;
import java.io.IOException; import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext; public class UploadAction { //只要File的名称与html中File控件的name相一致就可以获取到这个文件
private File image;
//只要使用file的name+FileName就可以获取到上传文件的名称
private String imageFileName;
//只要使用file的name+ContentType就可以获取到上传文件的类型
private String imageContentType;
private String message; public String uploadImage() {
try {
String realPath = ServletActionContext.getServletContext().getRealPath("/images");
File filePath = new File(realPath);
if (!filePath.exists()) {
filePath.mkdirs();
}
System.out.println("文件存放路径:" + realPath);
if (image != null) {
System.out.println("文件名:" + imageFileName + ",文件类型:" + imageContentType);
File saveFile = new File(filePath, imageFileName);
//默认Struts2会将文件上传到Struts2临时空间中,当Action执行完成以后将文件删除;
//要实现文件传,只需要将文件从临时空间copy到存储空间即可
FileUtils.copyFile(image, saveFile);
message="文件上传成功!";
}
} catch (IOException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
return "message";
} public File getImage() {
return image;
} public void setImage(File image) {
this.image = image;
} public String getImageFileName() {
return imageFileName;
} public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
} public String getImageContentType() {
return imageContentType;
} public void setImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} }

注:通过 <constant name="struts.multipart.maxSize" value="10701096"></constant>  可以设置上传文件的大小;

注:对于大文件上传,不推荐使用Web的方式进行上传,可以使用socket的方式;

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

  1. Struts2单文件上传原理及示例

    一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里 ...

  2. Struts2单文件上传

    第一步:首先写个上传文件的页面(简单的一个form表单) <html> <head> <meta http-equiv="Content-Type" ...

  3. struts2的文件上传

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...

  4. struts2实现文件上传和下载

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...

  5. Struts2实现单文件上传

    首先配置一下web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi ...

  6. 【Struts2学习笔记(9)】单文件上传和多文件上传

    (1)单文件上传 第一步:在WEB-INF/lib下增加commons-fileupload-1.2.1.jar.commons-io-1.3.2.jar. 这两个文件能够从http://common ...

  7. Struts2之文件上传(单文件/多文件)

    <一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...

  8. struts2之单文件上传(7)

    前台页面jsp <!-- 拦截的时候用这个 <s:form action="uploadAction" enctype="multipart/form-dat ...

  9. struts2实现文件上传(多文件上传)及下载

    一.要实现文件上传,需在项目中添加两个jar文件 二.上传准备的页面 注:必须植入enctype="multipart/form-data"属性,以及提交方式要设置成post &l ...

随机推荐

  1. 构建混合云:配置Azure site to site VPN连接(2)

    那么接下来的部分,我们开始正式配置S2S VPN: 首先配置本地网络,什么是本地网络呢?如果你在Azure上配置,本地网络意思是你自己的数据中心需要和Azure进行连接的网络段,而不是Azure上的网 ...

  2. python学习day10

    目录 Twisted Redis RabbitMQ   Twisted   事件驱动 事件驱动分为两个部分:第一,注册事件:第二,触发事件. 自定义事件启动框架,命名为:"弑君者" ...

  3. 解决C/C++程序执行一闪而过的方法(三种办法)

    简述 在VS编写控制台程序的时候,包括使用其他IDE(Visual C++)编写C/C++程序,经常会看到程序的执行结果一闪而过,要解决这个问题,可以在代码的最后加上system(“pause”).g ...

  4. Prime Ring Problem + nyoj 素数环 + Oil Deposits + Red and Black

    Prime Ring Problem Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) ...

  5. 加濾鏡效果GlowTween

    /** * * new GlowTween(xxxx, 0xFFFF00); * new GlowTween(xxxx, 0x00FFFF); * GlowTween */ package com.r ...

  6. 让你提前认识软件开发(23):怎样在C语言中运行shell命令?

    第1部分 又一次认识C语言 怎样在C语言中运行shell命令? [文章摘要] Linux操作系统具备开源等诸多优秀特性,因此在很多通信类软件(主流开发语言为C语言)中,开发平台都迁移到了Linux上, ...

  7. 模块化利器:RequireJS常用知识

    1. 模块化 目前常见的模块化开发方式,全局空间方式是最基本的一种,另外常见的还有遵循AMD规范的开发方式,遵循CMD规范的开发方式,和ECMAScript 6的开发方式.需要说明的是,CMD和ES6 ...

  8. Oracle11g重建EM 报ORA-20001: SYSMAN already exists

    日志: Apr , :: PM oracle.sysman.emcp.EMReposConfig createRepository : SYSMAN already exists.. ORA-0651 ...

  9. ORA-03113 通信通道的文件结尾(ORA-19804 ORA-16038-归档空间满的处理方法)

    1.数据库启动报错SQL> startupORACLE 例程已经启动. Total System Global Area 1887350784 bytesFixed Size 2176848 b ...

  10. VIM 中 查看{}是否闭合,按%跳转到下个闭合

    VIM 中 查看{}是否闭合,按%跳转到下个闭合