一:表单准备

① 要想使用HTML
表单上传一个或多个文件
    –须把 HTML表单的
enctype属性设置为multipart/form-data
    –须把HTML
表单的method 属性设置为post
    –需添加<inputtype=“file”>字段.

二:Struts2 文件上传原理以及步骤:

①  在Struts应用程序里,FileUpload拦截器和Jakarta
Commons FileUpload组件可以完成文件的上传.
② 步骤:
     –1.在
Jsp页面的文件上传表单里使用
file 标签.如果需要一次上传多个文件,
就必须使用多个 file
标签,但它们的名字必须是相同的
     –2.在
Action 中新添加 3个和文件上传相关的属性.
这 3 个属性的名字必须是以下格式
          [FileName] : File -被上传的文件。例如:data
          [FileName]ContentType : String -上传文件的文件类型。例如:dataContentType
          [FileName]FileName : String -上传文件的文件名。例如:dataFileName
          如果上上传多个文件,可以使用List

③ 简单文件上传示例:

表单页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="upload" enctype="multipart/form-data" method="post">
请选择文件:<input type="file" name="uploadFile">
<input type="submit" value="上传"/>
</form>
</body>
</html>

后台上传处理Action:

package com.elgin.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { /**
*
*/
private static final long serialVersionUID = 1L; private File uploadFile; //注意如下2个成员变量的命名形式
private String uploadFileFileName;
private String uploadFileContentType; public File getUploadFile() {
return uploadFile;
} public void setUploadFile(File uploadFile) {
this.uploadFile = uploadFile;
} public String getUploadFileFileName() {
return uploadFileFileName;
} public void setUploadFileFileName(String uploadFileFileName) {
this.uploadFileFileName = uploadFileFileName;
} public String getUploadFileContentType() {
return uploadFileContentType;
} public void setUploadFileContentType(String uploadFileContentType) {
this.uploadFileContentType = uploadFileContentType;
} public String execute() {
ServletContext servletContext = ServletActionContext.getServletContext();
String desdir = servletContext.getRealPath("/UploadFiles/" + uploadFileFileName);
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(uploadFile);
fos = new FileOutputStream(desdir);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return SUCCESS;
}
}

struts.xml 配置文件:

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="com" extends="struts-default">
<action name="upload" class="com.elgin.action.UploadAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>

④  如果在文件上传时需要增加相关限制条件,如文件大小、类型以及扩展名 ,可以通过给 FileUpload 拦截器配置参数来实现

      FileUpload拦截器有3
个属性可以设置.
        –maximumSize:上传单个文件的最大长度(以字节为单位),默认值为
2 MB
       –allowedTypes:允许上传文件的类型,
各类型之间以逗号分隔
       –allowedExtensions:允许上传文件扩展名,
各扩展名之间以逗号分隔
       –可以在 struts.xml文件中覆盖这
3 个属性
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="com" extends="struts-default"> <interceptors >
<interceptor-stack name="fileLimit">
<interceptor-ref name="defaultStack">
<!-- 允许上传的最大文件大小 -->
<param name="fileUpload.maximumSize">1048576</param>
<!-- 允许上传的文件类型 -->
<param name="fileUpload.allowedTypes">text/html,application/msword</param>
<!-- 允许上传的文件扩展名 -->
<param name="fileUpload.allowedExtensions">html,xml,doc</param>
</interceptor-ref>
</interceptor-stack>
</interceptors> <default-interceptor-ref name="fileLimit"></default-interceptor-ref> <action name="upload" class="com.elgin.action.UploadAction">
<result name="success">/success.jsp</result>
<result name="input">/uploadFile.jsp</result>
</action> </package>
</struts>

并且可以在国际化资源文件中定制错误消息:

struts.messages.error.uploading - 文件上传出错的消息

struts.messages.error.file.too.large - 文件超过最大值的消息

struts.messages.error.content.type.not.allowed - 文件内容类型不合法的消息

struts.messages.error.file.extension.not.allowed - 文件扩展名不合法的消息

问题: 此种方式定制的消息并不完善. 可以参考 org.apache.struts2 下的 struts-messages.properties, 可以提供更多的定制信息.

注意: 在 org.apache.struts2 下的 default.properties 中有对上传的文件总的大小的限制. 可以使用常量的方式来修改该限制

struts.multipart.maxSize=2097152

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

  1. 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】

    一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...

  2. springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传

    总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...

  3. Struts2文件上传下载

    Struts2文件上传 Struts2提供 FileUpload拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容,fileUpload拦截器 默认在defau ...

  4. Struts2文件上传和下载(原理)

    转自:http://zhou568xiao.iteye.com/blog/220732 1.    文件上传的原理:表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:1)     ...

  5. struts2文件上传大小限制问题小结

    一:首先看一下程序执行中出现的对应报错信息,如下所示: [WARN ] 2015-03-03 15:31:11 :Unable to parse request org.apache.commons. ...

  6. JAVA Web 之 struts2文件上传下载演示(二)(转)

    JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...

  7. JAVA Web 之 struts2文件上传下载演示(一)(转)

    JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...

  8. (八)Struts2 文件上传和下载

    所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:Struts2 文件上传 Struts2 文件上传基于Struts2 拦 ...

  9. struts2文件上传,文件类型 allowedTypes

    struts2文件上传,文件类型 allowedTypes 1 '.a' : 'application/octet-stream', 2 '.ai' : 'application/postscript ...

随机推荐

  1. web前端性能测试小点

    关于前端性能的文章: http://www.cnblogs.com/fnng/archive/2011/09/19/2181894.html web应用的前端性能响应时间指浏览器的页面加载时间.浏览器 ...

  2. BZOJ 2004 Bus 公交线路(矩阵)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2004 题意:小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依 ...

  3. linux/shell sort命令

    sort是在Linux里常用的一个命令,用来排序的 # man sort 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最 ...

  4. shell bash判断文件或文件夹是否存在

    #shell判断文件夹是否存在 #如果文件夹不存在,创建文件夹 if [ ! -d "/myfolder" ]; then mkdir /myfolder fi #shell判断文 ...

  5. Spring学习8-Spring事务管理

      http://blog.sina.com.cn/s/blog_7ffb8dd501014e0f.html   Spring学习8-Spring事务管理(注解式声明事务管理) 标签: spring注 ...

  6. [原]用WebBrowser组件模拟人工运行搜索引擎自动点击搜索结果的实验

    本代码只是业余时间无聊写着试试,用WebBrowser组件模拟人工运行搜索引擎自动点击搜索结果的实验 这是网络中盛传的提高搜索引擎点击率的一种方式,当然属于作弊,不推荐各位使用.另外这种方式的性能不佳 ...

  7. volicity语法学习和总结

    Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象.当Velocit ...

  8. PL/SQL database character set(AL32UTF8) and Client character set(ZHS16GBK) are different 2012-04-11 13:01

    启动PL/SQL Developer 报字符编码不一致错误 Database character set (AL32UTF8) and Client character set (ZHS16GBK) ...

  9. UVa 116 (多段图的最短路) Unidirectional TSP

    题意: 有一个m行n列的正整数环形矩阵(即矩阵第一行的上一行是最后一行,最后一行的下一行是第一行),从第一列的任意位置出发,每次只能向右,右上,右下三个方向行走,输出路径及路径上所有数之和的最大值,多 ...

  10. Java [Leetcode 67]Add Binary

    题目描述: Given two binary strings, return their sum (also a binary string). For example,a = "11&qu ...