struts2中文件上传过滤

手动实现文件过滤
  
     大部分时候,Web应用不允许浏览者自由上传,尤其不能允许上传可执行性文件——因为可能是病毒程序。通常,我们可以允许浏览者上传图片,上传压缩文件等;除此之外,还必须对浏览者上传的文件大小进行限制。因此必须在文件上传中进行文件过滤。

     从上面的Action中可以看出,Action内有两个方法分别用于获取文件类型和文件大小,为了实现文件过滤,完全可以通过判断这两个方法的返回值来实现文件过滤。 为了让上面的Action增加文件过滤的功能,在上面的Action中增加如下的方法:

 

/**
  * 过滤文件类型
  * @param types 系统所有允许上传的文件类型
  * @return 如果上传文件的文件类型允许上传,返回null,否则返回input字符串
  */

 public String filterType(String[] types)
 {
  //取得上传文件的文件类型。
  String fileType = getUploadContentType();
  遍历
  for (String type : types)
  {
   if (type.equals(fileType))
   {
    return null;
   }
  }
  return INPUT;
 }

 

 

上面方法判断了上传文件的文件类型是否在允许上传文件类型列表中。为了让应用程序可以动态配置允许上传的文件列表,为该Action增加了一个allowTypes的属性,该属性的值列出了所有允许上传的文件类型。为了可以在struts.xml文件中配置allowTypes属性的值,必须在Action类中提供如下代码:
 //定义该Action允许上传的文件类型
 private String allowTypes;
 //allowTypes属性的setter和getter方法
 public String getAllowTypes()
 {
  return allowTypes;
 }
 public void setAllowTypes(String allowTypes)
 {
  this.allowTypes = allowTypes;
 }


下面就可以在是实现该Action的execute方法了,在通过该方法实现文件上传之前,应该先判断上传文件的文件类型是否允许上传,增加类型判断后的execute方法如下:

public String execute() throws Exception
 {
  //将允许上传文件类型的字符串以英文逗号(,)分解成字符串数组。
  //从而判断当前文件类型是否允许上传
  String filterResult = filterType(getAllowTypes().split(","));
  //如果当前文件类型不允许上传
  if (filterResult != null)
  {
   ActionContext.getContext().put("typeError" , "您要上传的文件类型不正确!");
   return filterResult;
  }

  //以服务器的文件保存地址和原文件名建立上传文件输出流
  FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + getUploadFileName());
  //以上传文件建立一个文件上传流
  FileInputStream fis = new FileInputStream(getUpload());
  //将上传文件的内容写入服务器
  byte[] buffer = new byte[1024];
  int len = 0;
  while ((len = fis.read(buffer)) > 0)
  {
   fos.write(buffer , 0 , len);
  }
         return SUCCESS;
    }

上面的Action类代码非常简单,它包含的execute方法先判断当前文件类型是否是允许上传的文件类型,如果该文件类型不允许上传,则返回input逻辑视图名;只有当该文件的类型是允许上传的文件类型时,才真正执行文件上传逻辑。
为了让文件类型检验失败时能返回input逻辑视图,因此必须为该Action增加input逻辑视图配置,
下面是该Action的配置文件代码。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定Struts2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts>
 <!-- 指定国际化资源文件的baseName为globalMessages -->
 <constant name="struts.custom.i18n.resources" value="globalMessages"/>
 <!-- 设置该应用使用的解码集 -->
 <constant name="struts.i18n.encoding" value="GBK"/>
 <package name="lee" extends="struts-default">
  <!-- 配置处理文件上传的Action -->
  <action name="upload" class="lee.UploadAction">
   <!-- 通过动态设置allowTypes的属性来动态指定允许上传的文件类型 -->
             <param name="allowTypes">image/bmp,image/png,image/gif,image/jpeg</param>
   <!-- 动态设置Action的属性值 -->
             <param name="savePath">/upload</param>
   <!-- 配置Struts2默认的视图资源 -->
   <result>/succ.jsp</result> 
   <!-- 配置该应用的input逻辑视图 -->
   <result name="input"> /upload.jsp</result>
  </action>
 </package>
</struts>

 

 

 

通过上面的配置看出,上面文件类型仅能上传各种类型的图片文件,如果试图上传其他类型的文件,系统将转入input逻辑视图,该逻辑视图就是upload.jsp页面,该页面中使用如下代码输出错误提示:
<!-- 使用表达式语言输出错误提示 -->


如果试图上传非图片类型的文件,可以看到出错提示,提示用户不要上传非图片类型的文件
通过上面的介绍,我们可以更轻易地完成了文件类型的过滤。
如果需要实现文件大小过滤,与实现文件类型过滤的方法基本相似。虽然在上面的Action类中并没有方法直接获取上传文件的大小,但Action中包含了一个类型为File的属性,该属性封装了文件域对应的文件内容,而File类有一个length()方法,该方法可以返回文件的大小,通过比较该文件的大小和允许上传的文件大小,从而决定是否允许上传该文件。

 拦截器实现文件过滤

    上面手动实现文件过滤的方式虽然简单,但毕竟需要书写大量的过滤代码,不利于程序的高层次解构,而且开发复杂。
Struts2提供了一个文件上传的拦截器,通过配置该拦截器可以更轻松的实现文件过滤。Struts2中文件上传的过滤器是fileUpload,为了让该拦截器起作用,只需要在该Action配置该拦截器引用即可。

配置fileUpload拦截器时,可以为其指定两个参数:
allowedTypes:该参数指定允许上传的文件类型,多个文件类型之间以英文逗号(,)隔开。
maximumSize:该参数指定允许上传的文件大小,单位是字节。

    通过配置fileUpload的拦截器,可以更轻易的实现文件过滤,当文件过滤失败后,系统自动转入input逻辑视图,因此必须为该Action配置名为input的逻辑视图。除此之外,还必须显式地为该Action配置defaultStack的拦截器引用。
通过拦截器来实现文件过滤的配置文件如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定Struts2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts>
 <!-- 指定国际化资源文件的baseName为globalMessages -->
 <constant name="struts.custom.i18n.resources" value="globalMessages"/>
 <!-- 设置该应用使用的解码集 -->
 <constant name="struts.i18n.encoding" value="GBK"/>
 <package name="lee" extends="struts-default">
  <!-- 配置处理文件上传的Action -->
  <action name="upload" class="lee.UploadAction">
   <!-- 配置fileUpload的拦截器 -->
             <interceptor-ref name="fileUpload">
    <!-- 配置允许上传的文件类型 -->
                 <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
    <!-- 配置允许上传的文件大小 -->
                 <param name="maximumSize">2000</param> 
             </interceptor-ref> 
             <interceptor-ref name="defaultStack"/>
   <!-- 动态设置Action的属性值 -->
             <param name="savePath">/upload</param>
   <!-- 配置Struts2默认的视图资源 -->
   <result>/succ.jsp</result> 
   <!-- 配置该应用的input逻辑视图 -->
   <result name="input">/upload.jsp</result>
  </action>
 </package>
</struts>

 

 

上面的拦截器过滤不仅过滤了文件的类型,也过滤了文件大小。上传文件的类型只能是图片文件,且文件大小不能大于2000字节(当然,我们随时可以更改到更大)。如果我们上传文件的文件太大,系统将转入input的逻辑视图,也就是/upload.jsp页面。

Struts2 上传文件(带过滤文件类型和大小) Struts2 上传文件 过滤文件类型 过滤大小 立即下载

相关推荐

S32K144(14)ADC

1、简介 开发板S32K144+S32DS+JLINK,裸机版的程序编写 S32K14x包含两个12位ADC模块,ADC0和ADC1 应用程序可能需要ADC的连续采样(4K采样/秒),这可能对CPU有相当大的负载。虽然使用可编程延迟块(PDB)来触发ADC可能会减少一些CPU负载,但当ADC以非常高的速率采样或PDB被绕过时,ADC支持DMA请求功能以获得更高的性能。ADC可以在转换完成时触发DMA(通过DMA请求)。TRGMUX会根据不同的应用需求,使用软件为用户提供更灵活的DMA触发方案,例如,可

朗朗上口就行啦的博客 1万+

struts2文件上传的过滤

这篇文件接上面的struts2文件上传的文件,对上传文件类型进行过滤, 这篇文件里的大量内容也是借鉴了李刚老师的《struts2权威指南》手动实现文件过滤大部分时候,Web应用不允许浏览者自由上传,尤其不能允许上传可执行性文件——因为可能是病毒程序。通常,我们可以允许浏览者上传图片,上传压缩文件等;除此之外,还必须对浏览者上传的文件大小进行限制。因此必须在文件上传中进行文件过滤。从上面的Act

spring_fans的专栏 2835

栅格数据空间叠置分析题目步骤讲解

题目: 准备工作: ①新建数据库,将实验数据导入(利于后期矢量转栅格操作,未建数据库此步骤会一直出错); ②在工具条自定义窗口勾选spacial analyst模块,在菜单栏→扩展模块,勾选spacial analyst;确保实验后面的操作可以成功。 详细操作步骤: 1.对三个方案的规划路线(line.shp)建立50m缓冲区;打开ArcMap,在ArcToolBox→分析工具→邻域分析→缓冲区,打开缓冲区工具窗口,界面设置如图:线性单位填写50米,其余默认,单击“确定”。 ...

m0_57139844的博客 8893

Struts2文件上传与过滤

为了能上传文件,必须将表单的method设置为post,将enctype设置为multipart/form-data。只有在这种情况下,浏览器才会把用户选择文件的二进制数据发送给服务器。Struts2不会自己去处理multipart/form-data的请求,需要调用其他上传框架来解析二进制请求数据。 struts.properties中: #指定使用COS的文件上传解析器 #struts.m

curry_du的专栏 960

影刀RPA进阶:Excel多条件筛选与数据提取实战

本文详细介绍了如何利用影刀RPA实现Excel多条件筛选与数据提取的自动化。通过拆解文本、数值、日期及颜色筛选等核心指令,并结合实战案例,指导用户构建稳健的销售数据提取机器人,从而高效处理复杂数据报表,提升工作效率。

onion的博客 529

DPO(Direct Preference Optimization)直接偏好优化

本文介绍了DPO(直接偏好优化)方法,该方法通过简化传统的RLHF(基于人类反馈的强化学习)流程,直接利用人类偏好数据进行模型优化。DPO的核心思想是跳过奖励模型训练和强化学习交互步骤,通过数学推导将优化目标转化为仅与策略概率分布相关的形式。推导表明最优策略与奖励模型之间存在显式关系,从而可以构建直接优化策略的损失函数。与RLHF相比,DPO简化了训练流程,提高了工程实现稳定性,同时保持了同等效果。

TeenLucifer的博客 1954

struts2文件上传类型的过滤

转自:http://www.2cto.com/kf/201403/282787.html 第一种解决方案: 1.手动实现文件过滤: 判断上传的文件是否在允许的范围内定义该Action允许上传的文件类型 private String allowTypes;利用Struts2的输入效验判断用户的输入的文件是否合理 UploadAction.java 1 ...

weixin_34090562的博客 101

用MFRC522+STM32打造智能门禁:从硬件选型到云端控制全流程

本文详细介绍了基于STM32微控制器和MFRC522射频模块构建智能门禁系统的完整流程。从硬件选型、电路设计、底层驱动开发,到系统软件架构与状态机设计,并最终实现通过ESP8266模块接入云端平台(如OneNET)进行远程控制和数据可视化。项目深入探讨了MFRC522的SPI通信、卡片操作流程、天线调试以及云端MQTT集成等关键技术,为嵌入式开发者提供了一个从本地感知到云端管控的物联网项目实战参考。

raspberrypi5的博客 741

struts2实现文件上传(类型、大小过滤——手动、拦截器)

struts2实现文件上传 1、首先需要引入上传文件所需的jar包,下面是对应的maven坐标。 commons-fileupload commons-fileupload 1.3.1 commons-io commons-io 2.4 2、添加jsp文件aaa.jsp和bbb.jsp aaa.jsp <% String

archer的技术故事 4172

YOLO项目部署:从Python脚本到Docker容器的企业级交付全流程

YOLO模型企业级Docker部署方案 核心挑战 环境一致性:解决"本地能跑,服务器崩掉"问题 可扩展性:支持单实例到多实例扩展 稳定性:确保99.9%可用性 部署流程 项目改造:模块化代码,分离配置 Docker镜像:支持CPU/GPU环境 API服务:封装推理逻辑 监控告警:实现自动化运维 技术方案 需求 解决方案 环境一致性 Docker镜像+依赖冻结 可扩展性 K8s+负载均衡 稳定性 健康检查+自动重启 项目结构 模块化代码组织 外部化配置管理 精确依赖版本控制 摘要重点:通过

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1230

基于ArduPilot的旋翼式无人机飞行器开发系列(二,学习路线)

一,热爱 作为一名耿直的技术男,在这里我只想说一句,热爱是可持续学习的第一要素,也只有热爱才能让你坚持到最后。 至于最后能得到什么,只有你自己知道。常说书中自有颜如玉,书中自有黄金屋。如果你是为了颜如玉,我相信大多数颜如玉做不了你的红颜知己。如果是为了黄金屋,当你持续投入时间和金钱却看不到回报的时候,相信退堂鼓早已隆隆作响。 我给自己的信条就是为当下努力工作,为将来持续学习。当前飞控行业并没有爆发,如果想赚块钱,去互联网汽车,去VR/AR吧,去元宇宙吧。 那么我热爱...

从0到1,突破自己 1666

Struts2手动实现文件上传过滤

一视图 1uploadForm.jsp <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML...

实践求真知 201

LeRobot 入门教程(十四)Meta-World 机器人多任务与元强化学习操作仿真基准平台

Meta-World是一个开源机器人操作模拟基准平台,专注于多任务与元强化学习研究。该平台提供50项多样化任务(MT50套件),采用标准化评估协议测试算法泛化能力。LeRobot平台支持Meta-World任务评估,提供预处理数据集和训练工具。用户可通过命令行快速训练SmolVLA策略,并评估模型在简单、中等、困难等不同难度任务上的表现。文章还提供了兼容性问题和实用技巧建议,如使用完整MT50任务集测试泛化能力、采用one-hot任务条件化等。这些资源为研究人员开展机器人多任务学习提供了标准化实验环境。

2506_90492529的博客 1019

java文件上传过滤,struts2中文件上传过滤

手动实现文件过滤大部分时候,Web应用不允许浏览者自由上传,尤其不能允许上传可执行性文件——因为可能是病毒程序。通常,我们可以允许浏览者上传图片,上传压缩文件等;除此之外,还必须对浏览者上传的文件大小进行限制。因此必须在文件上传中进行文件过滤。从上面的Action中可以看出,Action内有两个方法分别用于获取文件类型和文件大小,为了实现文件过滤,完全可以通过判断这两个方法的返回值来实现文件过滤。...

weixin_42374582的博客 518

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

struts2的文件上传(2):手动实现上传文件类型的过滤

大部分时候,Web应用不允许浏览者自由上传文件,尤其不能允许上传可执行性文件------因为可能是病毒程序。通常,我们可以允许浏览者上传图片,压缩文件等;除此之外,还必须对浏览者上传的文件大小进行设置。因此必须在文件上传中进行文件过滤。本篇文章只讨论过滤文件类型。 从处理表单文件域的Action中可以看出,它里面有两个方法分别用于获取文件类型和大小。为了实现文件过滤,可以通过判断这两个方法的返回

confirmAname的专栏 1093

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Struts2文件上传的过滤

Struts2提供了文件上传的拦截器fileUpload,只需要在struts.xml文件中配置上传文件Action时添加这个拦截器。fileUpload拦截器有三个参数:1.maximumSize:用来限定文件上传的最大值,单位是B(字节)。2.allowedTypes:用来指定上传文件的类型,多个文件类型之间要用逗号隔开。3.allowedExtensions:用来指定上传文件的扩展名,多个扩

颜枫 1207

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java文件上传过滤,struts2文件上传类型的过滤 | 学步园

第一种解决方案:1.手动实现文件过滤:判断上传的文件是否在允许的范围内定义该Action允许上传的文件类型 private String allowTypes;利用Struts2的输入效验判断用户的输入的文件是否合理UploadAction.javapackage action;import java.io.File;import java.io.FileInputStream;import ja...

weixin_39789525的博客 313

[Struts2]在使用Struts2的文件上传时,文件大小和类型过滤后,页面无法跳转至input页面

在使用Struts2的文件上传时,文件大小和类型过滤后,页面无法跳转至input页面struts.xml配置文件如下: image/bmp,image/png,image/gif,image/jpeg,image/jpg ,image/x-png, image/pjpeg

墨竹 7715

Struts2文件上传之手动过滤类型与大小

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 文件上传演示 文件标题: 上传文件:

北风 542

Struts2 文件上传 文件类型 大小过滤

使用Struts2上传文件,其实使用的是apache的 commons-fileupload-1.1.jar在实际使用的过程中,配置了fileUpload拦截器并不能过滤上传的文件类型,只能处理大小过滤                                                                    image/bmp,image/png

winderain的专栏 1052

struts2的文件上传(3):利用拦截器实现文件过滤

手动实现文件过滤的思路简单,但是需要编写大量的过滤代码,不利于程序的高层次解构,而且开发复杂。 Struts2提供了一个文件上传的拦截器fileUpload,通过配置该拦截器可以更轻松地实现文件过滤。 配置fileUpload拦截器时,可以为其指定两个参数: ① allowedTypes : 该参数指定允许上传的文件类型,多个文件类型之间以英文逗号隔开。 ② maximumSize :

confirmAname的专栏 1423

Struts 2读书笔记-----Struts 2实现文件过滤

通常对于Web应用,我们可以云寻浏览者上传图片、上传压缩文件等,但是除此之外,我们必须对浏览者上传的文件大小、类型进行限制。因此必须在文件上传中进行文件过滤。             一、手动实现文件过滤           如果需要手动实现文件过滤,可以按照如下步骤进行           1、在Action中定义一个专用于进行文件过滤的方法。方法名任意,该方法的逻辑判断上传文件的类型是

chenssy 的技术博客 3611
上一篇: dhtmlxTree和frame那点事儿(第三方ajax树)
下一篇: jquery.form.js应用入门
w3053_5fdf588
博客等级 码龄18年 0粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值