首页 > 代码库 > struts 多文件上传 xml 版本
struts 多文件上传 xml 版本
【本文简介】
本文将介绍 以配置 struts.xml 的方式 实现 多文件上传的功能。
【文件夹结构】
【struts.xml】
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> 3 <struts> 4 5 <!-- 结果页面存储文件夹 --> 6 <constant name="struts.convention.result.path" value="/pages"/> 7 <!-- URL资源分隔符 --> 8 <constant name="struts.convention.action.name.separator" value="_" /> 9 <!-- 默认编码 -->10 <constant name="struts.i18n.encoding" value="UTF-8" />11 <!-- 开发模式,显示详细错误信息 -->12 <constant name="struts.devMode" value="true" />13 <!-- 是否每次HTTP请求到达时,系统都重新加载资源文件,默认false -->14 <constant name="struts.i18n.reload" value="false" />15 <!-- 是否在struts.xml修改后重新加载 ,默认false-->16 <constant name="struts.configuration.xml.reload" value="false"/>17 <!-- 浏览器是否缓存静态内容,默认true -->18 <constant name="struts.serve.static.browserCache" value="true" />19 20 21 <!-- ****************************以下是文件上传的设置*********************************** -->22 <!-- 指定国际化资源文件的baseName为messageResource -->23 <!-- 设置该应用使用的解码集 -->24 <constant name="struts.i18n.encoding" value="utf-8"/>25 <!-- 上传的全部文件的最大限制-->26 <constant name="struts.multipart.maxSize" value="1024102400"/>27 <!-- 设置存放临时文件的文件夹 -->28 <constant name="struts.multipart.saveDir" value="/tmp"></constant>29 <!-- ****************************以上是文件上传的设置*********************************** -->30 31 32 <!-- **************************** 以下是上传文件的action **************************** -->33 <package name="default" extends="struts-default">34 <action name="uploadFile" class="com.modelsystem.action.UploadFileAction" >35 36 <!-- 限制图片的格式和图片的大小 -->37 <interceptor-ref name="fileUpload">38 <param name="allowedTypes">39 image/bmp,image/png,image/gif,image/jpeg,image/jpg,text/plain40 </param>41 <param name="maximumSize">102400</param>42 </interceptor-ref>43 44 <!-- 默认的拦截器,必须要写 -->45 <interceptor-ref name="defaultStack" />46 47 <result name="success">/upload.jsp</result>48 <result name="input">/upload.jsp</result>49 </action>50 </package>51 <!-- **************************** 以上是上传文件的action **************************** -->52 53 </struts>
【JSP代码】
注意:
- <s:form 里面不能少了
enctype
=
"multipart/form-data"
请求要post形式
- <s:file 里面的name="..."要是java代码里面的List<File> ... 对应。
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <%@taglib uri="/struts-tags" prefix="s" %> 9 <html>10 <head>11 <base href="<%=basePath%>">12 13 <title>My JSP ‘MyJsp2.jsp‘ starting page</title>14 15 <meta http-equiv="pragma" content="no-cache">16 <meta http-equiv="cache-control" content="no-cache">17 <meta http-equiv="expires" content="0"> 18 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">19 <meta http-equiv="description" content="This is my page">20 <!--21 <link rel="stylesheet" type="text/css" href="http://www.mamicode.com/styles.css">22 -->23 24 </head>25 26 <body>27 <center>28 <font color="red"><s:fielderror/></font>29 <s:form action="uploadFile" method="post" enctype="multipart/form-data">30 <s:file name="file" label="文件1"></s:file>31 <s:file name="file" label="文件2"></s:file>32 <s:submit label="上传"/>33 </s:form> 34 35 <s:iterator value="fileFileName" status="length">36 <img src=‘upload/<s:property value="fileFileName.get(#length.index)"/>‘>37 </s:iterator>38 39 </center>40 </body>41 </html>
【java代码】
1 package com.modelsystem.action; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.OutputStream; 9 import java.util.List;10 11 import org.apache.struts2.ServletActionContext;12 13 /**14 * @描述 struts 多文件上传 xml 版本15 * @作者 小M16 * @博客 http://www.cnblogs.com/xiaoMzjm/17 * @时间 2014/07/3018 */19 public class UploadFileAction extends BaseAction {20 21 private static final long serialVersionUID = 1L;22 23 // 上传的文件,struts会自动帮我们填充至此,因为多文件,所以用List24 private List<File> file;25 26 // 上传的文件的文件名,因为多文件,所以用List27 private List<String> fileFileName;28 29 // 上传的文件的类型,因为多文件,所以用List30 private List<String> fileContentType;31 32 public List<File> getFile() {33 return file;34 }35 36 public void setFile(List<File> file) {37 this.file = file;38 }39 40 public List<String> getFileFileName() {41 return fileFileName;42 }43 44 public void setFileFileName(List<String> fileFileName) {45 this.fileFileName = fileFileName;46 }47 48 public List<String> getFileContentType() {49 return fileContentType;50 }51 52 public void setFileContentType(List<String> fileContentType) {53 this.fileContentType = fileContentType;54 }55 56 /**57 * 文件上传关键方法。58 */59 public String execute() throws IOException{60 61 // 文件所放的文件夹,通过getRealPath获得服务器下项目的地址。避免地址写死。upload是webRoot下的一个存放文件的文件夹。62 String root = ServletActionContext.getServletContext().getRealPath("/")+"\\upload\\"; 63 64 //循环上传的文件65 for(int i = 0 ; i < file.size() ; i ++){66 67 // 获取当前遍历到的文件,new 一个文件输入流,连接到该文件。68 InputStream is = new FileInputStream(file.get(i));69 70 // new 一个文件,连接到要存储的文件夹处。71 File destFile = new File(root,this.getFileFileName().get(i));72 73 // new 一个输出流,连接到要存储的文件处。74 OutputStream os = new FileOutputStream(destFile);75 76 // 字节流,规定可写入的字节数。77 byte[] buffer = new byte[is.available()];78 int length = 0 ;79 80 // 开始写入文件81 while((length = is.read(buffer))>0){82 os.write(buffer, 0, length);83 }84 is.close();85 os.close();86 }87 return SUCCESS;88 }89 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。