热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Struts2实现文件上传功能

这篇文章主要为大家详细介绍了Struts2实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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" %>


 


 
 
 
 


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

<&#63;xml version="1.0" encoding="UTF-8" &#63;>



 
 

 

 
 
  /WEB-INF/jsp/fileUpload.jsp
  
  image/png,image/gif,image/jpeg
 

 



拦截器实现文件过滤  

  Struts2提供了一个文件上传的拦截器,fileUpload,为了让该拦截器起作用,要在action中配置拦截器引用。

  配置fileUpload拦截器时,可以为其指定两个参数:

    allowTypes:允许上传的文件类型,多个文件类型之间用英文逗号,隔开

    maximumSize:允许上传的文件大小,单位是字节。

  当文件过滤失败后,系统自动转入input逻辑视图,因此必须为该Action配置名为input的逻辑视图。除此之外,还必须显示地为该Action配置defaultStack的拦截器引用。

struts.xml配置文件如下:

<&#63;xml version="1.0" encoding="UTF-8" &#63;>



 
 

 

 
 
  
  
  
  image/png,image/gif,image/jpeg
  
  2000
  
  
  
  
  /WEB-INF/jsp/input.jsp

  /WEB-INF/jsp/fileUpload.jsp
 

 



  上面配置的文件上传的拦截器,要求文件上传的类型只能是图片文件,并且文件大小不能大于2000字节,如果上传文件太大,或者类型不符合,则将跳转到input逻辑视图。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
author-avatar
wayne251312
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有