【本文简介】

本文将介绍 以配置 struts.xml  的方式 实现 多文件上传的功能。

【文件夹结构】

【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.convention.result.path" value="/pages"/>
<!-- URL资源分隔符 -->
<constant name="struts.convention.action.name.separator" value="_" />
<!-- 默认编码 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 开发模式,显示详细错误信息 -->
<constant name="struts.devMode" value="true" />
<!-- 是否每次HTTP请求到达时,系统都重新加载资源文件,默认false -->
<constant name="struts.i18n.reload" value="false" />
<!-- 是否在struts.xml修改后重新加载 ,默认false-->
<constant name="struts.configuration.xml.reload" value="false"/>
<!-- 浏览器是否缓存静态内容,默认true -->
<constant name="struts.serve.static.browserCache" value="true" /> <!-- ****************************以下是文件上传的设置*********************************** -->
<!-- 指定国际化资源文件的baseName为messageResource -->
<!-- 设置该应用使用的解码集 -->
<constant name="struts.i18n.encoding" value="utf-8"/>
<!-- 上传的全部文件的最大限制-->
<constant name="struts.multipart.maxSize" value="1024102400"/>
<!-- 设置存放临时文件的文件夹 -->
<constant name="struts.multipart.saveDir" value="/tmp"></constant>
<!-- ****************************以上是文件上传的设置*********************************** --> <!-- **************************** 以下是上传文件的action **************************** -->
<package name="default" extends="struts-default">
<action name="uploadFile" class="com.modelsystem.action.UploadFileAction" > <!-- 限制图片的格式和图片的大小 -->
<interceptor-ref name="fileUpload">
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg,image/jpg,text/plain
</param>
<param name="maximumSize">102400</param>
</interceptor-ref> <!-- 默认的拦截器,必须要写 -->
<interceptor-ref name="defaultStack" /> <result name="success">/upload.jsp</result>
<result name="input">/upload.jsp</result>
</action>
</package>
<!-- **************************** 以上是上传文件的action **************************** --> </struts>

【JSP代码】

注意:
  1. <s:form 里面不能少了 enctype="multipart/form-data" 
  2. 请求要post形式
  3. <s:file 里面的name="..."要是java代码里面的List<File> ... 对应。
 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'MyJsp2.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<center>
<font color="red"><s:fielderror/></font>
<s:form action="uploadFile" method="post" enctype="multipart/form-data">
<s:file name="file" label="文件1"></s:file>
<s:file name="file" label="文件2"></s:file>
<s:submit label="上传"/>
</s:form> <s:iterator value="fileFileName" status="length">
<img src='upload/<s:property value="fileFileName.get(#length.index)"/>'>
</s:iterator> </center>
</body>
</html>

【java代码】

 package com.modelsystem.action;

 import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List; import org.apache.struts2.ServletActionContext; /**
* @描述 struts 多文件上传 xml 版本
* @作者 小M
* @博客 http://www.cnblogs.com/xiaoMzjm/
* @时间 2014/07/30
*/
public class UploadFileAction extends BaseAction { private static final long serialVersionUID = 1L; // 上传的文件,struts会自动帮我们填充至此,因为多文件,所以用List
private List<File> file; // 上传的文件的文件名,因为多文件,所以用List
private List<String> fileFileName; // 上传的文件的类型,因为多文件,所以用List
private List<String> fileContentType; public List<File> getFile() {
return file;
} public void setFile(List<File> file) {
this.file = file;
} public List<String> getFileFileName() {
return fileFileName;
} public void setFileFileName(List<String> fileFileName) {
this.fileFileName = fileFileName;
} public List<String> getFileContentType() {
return fileContentType;
} public void setFileContentType(List<String> fileContentType) {
this.fileContentType = fileContentType;
} /**
* 文件上传关键方法。
*/
public String execute() throws IOException{ // 文件所放的文件夹,通过getRealPath获得服务器下项目的地址。避免地址写死。upload是webRoot下的一个存放文件的文件夹。
String root = ServletActionContext.getServletContext().getRealPath("/")+"\\upload\\"; //循环上传的文件
for(int i = 0 ; i < file.size() ; i ++){ // 获取当前遍历到的文件,new 一个文件输入流,连接到该文件。
InputStream is = new FileInputStream(file.get(i)); // new 一个文件,连接到要存储的文件夹处。
File destFile = new File(root,this.getFileFileName().get(i)); // new 一个输出流,连接到要存储的文件处。
OutputStream os = new FileOutputStream(destFile); // 字节流,规定可写入的字节数。
byte[] buffer = new byte[is.available()];
int length = 0 ; // 开始写入文件
while((length = is.read(buffer))>0){
os.write(buffer, 0, length);
}
is.close();
os.close();
}
return SUCCESS;
}
}

struts 多文件上传 xml 版本的更多相关文章

  1. struts 多文件上传 annotation注解(零配置)+ ajaxfileupload + 异步 版本

    [本文简介] struts 多文件上传.基于”零配置“+"ajaxfileupload" 的一个简单例子. [导入依赖jar包] jquery-1.7.2.js : http:// ...

  2. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

  3. java框架篇---struts之文件上传和下载

    Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...

  4. Struts中文件上传的一些规则...

    1.action中定义规范 如果jsp中file的name="xxx",那么后台action中的属性要做相应更改为 private File xxx; private String ...

  5. struts实现文件上传和下载。

    先来实现上传. 写上传不管语言,都要先注意前端的form那儿有个细节. <form name="form1" method="POST" enctype= ...

  6. Struts:文件上传下载

  7. Struts 框架 之 文件上传下载案例

    Struts 框架 文件上传 1. 先准备 Struts 环境 (我使用的是struts 2.3.4版本) 导jar包:

  8. Struts文件上传allowedTypes问题,烦人的“允许上传的文件类型”

    Struts的文件上传问题,相信很多人都会使用allowedTypes参数来配置允许上传的文件类型,如下. <param name="allowedTypes"> im ...

  9. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

随机推荐

  1. Selenium操作之滚动条

    在用Selenium做UI自动化时,经常会遇到有些元素找不到之类的问题,但是自己的代码并没有错,元素就是找不到,这是为什么呢?原因很简单,由于页面内容较多,有些内容需要下拉滚动条才会显示,这里介绍一种 ...

  2. vue render函数 函数组件化

    之前创建的锚点标题组件是比较简单,没有管理或者监听任何传递给他的状态,也没有生命周期方法,它只是一个接受参数的函数 在这个例子中,我们标记组件为functional,这意味它是无状态(没有data), ...

  3. vue render函数

    基础 vue推荐在绝大多数情况下使用template来创建你的html.然而在一些场景中,你真的需要javascript的完全编程能力.这就是render函数.它比template更接近编译器 < ...

  4. Ubuntu Apache配置及开启mod_rewrite模块

    刚刚将服务器系统从CentOS换成Ubuntu,将MySQL,Apache,PHP和Wordpress安装好后,发现打开主页是正常的,但是打开文章页面时出现错误.因为使用了自定义的固定链接设置,那自然 ...

  5. kubernetes和calico集成

    硬件环境: 三台虚拟机: 192.168.99.129 master(kube-apiserver.kube-controller-manager.kube-proxy.kube-scheduler. ...

  6. FAT,FAT32,NTFS单目录文件数量限制

    http://hi.baidu.com/huaxinchang/item/5ba53ba9b29631756dd4551b —————————————————————————————————————— ...

  7. win下如何查看那个网络端口被那个应用程序使用

    在运行里面键入cmd打开命令行窗口.     在命令行窗口键入命令: netstat -ano 第一和第二列是自己网络的端口和外网连接的端口,pid:(全称Process Identification ...

  8. CH Round #54 - Streaming #5 (NOIP模拟赛Day1)(被虐瞎)

    http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20%28NOIP%E6%A8%A1%E6%8B%9F%E8%B ...

  9. 【vijos】1781 同余方程(拓展欧几里得)

    https://vijos.org/p/1781 学习了下拓欧.. 求exgcd时,因为 a*x1+b*y1=a*x2+b*y2=b*x2+(a-b*[a/b])*y2 然后移项得 a*x1+b*y1 ...

  10. 【BZOJ】3392: [Usaco2005 Feb]Part Acquisition 交易(spfa)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3392 同1674 #include <cstdio> #include <cstr ...