Servlet 3.0规范的HttpServletRequest已经提供了方法来处理文件上传但这种上传需要在Servlet中完成。而Struts2则提供了更简单的封装。
Struts2默认使用的是Jakarta的Common-FileUpload的文件上传框架,因此使用Struts2的文件上传功能,则需要添加两个jar包,即commons-io-2.2.jar和commons-fileupload-1.3.1.jar。
Struts2简单文件上传示例:
1.文件上传页面
为了能上传文件,表单的method必须设置为POST,并且enctype设置为multipart/form-data。一旦设置了enctype为multipart/form-data,此时浏览器将会采用二进制流的方式来处理表单数据。
<%@ taglib prefix="s" uri="/struts-tags" %> <%-- Created by IntelliJ IDEA. User: Administrator Date: 2018/1/16 Time: 14:06 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Struts2 简单文件上传</title> </head> <body> <s:form action="file_upload" method="POST" enctype="multipart/form-data"> <s:file name="upload" label="选择文件"/> <s:submit value="上传"/> </s:form> </body> </html>
2.处理上传请求的Action
/** * Description:Struts2简单文件上传 * Author: Eleven * Date: 2018/1/24 10:39 */ public class FileAction extends ActionSupport{ //上传文件 private File upload; //上传文件类型 private String uploadContentType; //上传文件名 private String uploadFileName; //文件上传允许的类型在struts.xml中使用param标签动态设置了 private String allowTypes; public String page(){ return "page"; } public void upload() { //文件上传: //1.读取文件内容 //2.将文件内容写到指定文件 try{ System.out.println("文件上传允许的类型="+allowTypes); String realPath = ServletActionContext.getServletContext().getRealPath("/upload"); System.out.println("项目的绝对路径="+realPath); //创建文件保存目录 new File(realPath).mkdir(); File file = new File(realPath+"/"+uploadFileName); //文件不存在则创建 if(!file.exists()){ file.createNewFile(); } FileOutputStream out = new FileOutputStream(file); FileInputStream in = new FileInputStream(upload); byte[] buffer = new byte[1024]; int len = 0; //边读边写 每次读取1kb 写1kb while((len = in.read(buffer))>0){ out.write(buffer,0,len); } System.out.println("文件上传成功..."); }catch(Exception e){ e.printStackTrace(); } } 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; } public String getAllowTypes() { return allowTypes; } public void setAllowTypes(String allowTypes) { this.allowTypes = allowTypes; } }
如果表单中包含一个name属性为xxx的文件域,则对应的Action中需要使用三个成员变量来封装该文件域的信息。
类型为File的xxx成员变量封装了该文件域对应的文件内容。
类型为String的xxxFileName成员变量封装了该文件域对应的文件的文件名。
类型为String的xxxContentType成员变量封装了该文件域对应的文件的文件类型。
3.配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <!--文件上传--> <action name="file_*" class="eleven.action.FileAction" method="{1}"> <result name="page">/WEB-INF/jsp/fileUpload.jsp</result> <!--动态设置action的属性,这里举例设置了允许文件上传的类型,但是action程序中并未做过多的处理--> <param name="allowTypes">image/png,image/gif,image/jpeg</param> </action> </package> </struts>
拦截器实现文件过滤
Struts2提供了一个文件上传的拦截器,fileUpload,为了让该拦截器起作用,要在action中配置拦截器引用。
配置fileUpload拦截器时,可以为其指定两个参数:
allowTypes:允许上传的文件类型,多个文件类型之间用英文逗号,隔开
maximumSize:允许上传的文件大小,单位是字节。
当文件过滤失败后,系统自动转入input逻辑视图,因此必须为该Action配置名为input的逻辑视图。除此之外,还必须显示地为该Action配置defaultStack的拦截器引用。
struts.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <!--文件上传--> <action name="file_*" class="eleven.action.FileAction" method="{1}"> <!--配置fileUpload拦截器 且配置在defaultStack拦截器栈之前--> <interceptor-ref name="fileUpload"> <!--允许上传的文件类型--> <param name="allowedTypes">image/png,image/gif,image/jpeg</param> <!--允许上传文件大小--> <param name="maximumSize">2000</param> </interceptor-ref> <!--配置系统默认拦截器--> <interceptor-ref name="defaultStack"/> <!--配置input视图页面--> <result name="input">/WEB-INF/jsp/input.jsp</result> <result name="page">/WEB-INF/jsp/fileUpload.jsp</result> </action> </package> </struts>
上面配置的文件上传的拦截器,要求文件上传的类型只能是图片文件,并且文件大小不能大于2000字节,如果上传文件太大,或者类型不符合,则将跳转到input逻辑视图。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Struts2实现上传单个文件功能,包括了Struts2实现上传单个文件功能的使用技巧和注意事项,需要的朋友参考一下 upload.jsp 这个页面选择提交文件,提交到uploadImage.action FileUploadAction.java 将传来的file进行处理 uploadFileName和uploadContentType,这两个属性分别用于封装上传文件的文件名、上传
本文向大家介绍java Struts2框架下实现文件上传功能,包括了java Struts2框架下实现文件上传功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Struts2框架实现文件上传的方法,供大家参考,具体内容如下 struts2的配置过程 (1)在项目中加入jar包 (2)web.xml中filter(过滤器)的配置 (3)struts.xml配置文件的编写
本文向大家介绍struts2实现多文件上传,包括了struts2实现多文件上传的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了struts2实现多文件上传的具体代码,供大家参考,具体内容如下 首先搭建好struts2的开发环境,导入struts2需要的最少jar包 新建upload.jsp页面,注意一定要把表单的enctype设置成multipart/form-data 新建一个Up
本文向大家介绍ajaxfileupload.js实现上传文件功能,包括了ajaxfileupload.js实现上传文件功能的使用技巧和注意事项,需要的朋友参考一下 使用ajaxfileupload.js实现上传文件功能 一、ajaxFileUpload是一个异步上传文件的jQuery插语法:$.ajaxFileUpload([options]) options参数说明: 1、url
本文向大家介绍AjaxUpLoad.js实现文件上传功能,包括了AjaxUpLoad.js实现文件上传功能的使用技巧和注意事项,需要的朋友参考一下 AjaxUpLoad.js的使用实现无刷新文件上传,如图。 图1 文件上传前 图2 文件上传后 1、创建页面并编写HTML 上传文档: 上传图片: 2、引用AjaxUpload.js文件 3、编写JS脚本 4、创建/Common/UploadHan
本文向大家介绍java实现文件上传功能,包括了java实现文件上传功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现文件上传的具体代码,供大家参考,具体内容如下 一、文件上传准备工作 对于文件上传,浏览器在上传的过程中将文件以流的形式提交到服务器。 可以选择apache的commons-fileupload包作为文件上传组件,commons-fileupload包依赖于