struts2上传文件类型的判断详解

Struts2文件类型汇总 Struts2文件类型汇总,各种上传文件类型集合。 立即下载

这个在struts2的doc中已经有所说明,但是说得并不详细,而且他给的例子是有错误的,下面我将列出文件上传并限制类型的具体步骤

struts2版本是2.1.6
struts2是根据contentType来限制的,并不是文件的扩展名
比如我想仅上传image/png,image/gif,image/jpeg这三种文件类型

第一种方法是通过javascript校验来限制,这个比较简单,获取input的value然后截取扩展名进行判断即可

第二种是根据struts2自带的fileupload拦截器中提供的allowedTypes来进行限制,步骤如下:
1 配置fileupload拦截器
struts2的defaultStack中已经含有fileupload拦截器,如果想加入allowedTypes参数,需要从新写一个defaultstack ,拷贝过来修改一下即可:

            <interceptor-stack name="myDefaultStack">
                
<interceptor-ref name="exception"/>
                
<interceptor-ref name="alias"/>
                
<interceptor-ref name="servletConfig"/>
                
<interceptor-ref name="i18n"/>
                
<interceptor-ref name="prepare"/>
                
<interceptor-ref name="chain"/>
                
<interceptor-ref name="debugging"/>
                
<interceptor-ref name="profiling"/>
                
<interceptor-ref name="scopedModelDriven"/>
                
<interceptor-ref name="modelDriven"/>
                
<interceptor-ref name="fileUpload">
                  
<param name="allowedTypes">
                     image/png,image/gif,image/jpeg
                  
</param>
                
</interceptor-ref>
                
<interceptor-ref name="checkbox"/>
                
<interceptor-ref name="staticParams"/>
                
<interceptor-ref name="actionMappingParams"/>
                
<interceptor-ref name="params">
                  
<param name="excludeParams">dojo\..*,^struts\..*</param>
                
</interceptor-ref>
                
<interceptor-ref name="conversionError"/>
                
<interceptor-ref name="validation">
                    
<param name="excludeMethods">input,back,cancel,browse</param>
                
</interceptor-ref>
                
<interceptor-ref name="workflow">
                    
<param name="excludeMethods">input,back,cancel,browse</param>
                
</interceptor-ref>
            
</interceptor-stack>
        
</interceptors>
        
<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>

仅修改代码中的

                <interceptor-ref name="fileUpload">
                  
<param name="allowedTypes">
                     image/png,image/gif,image/jpeg
                  
</param>
                
</interceptor-ref>

上面配置的是上传文件类型的限制,其实共有两个参数

maximumSize (可选) - 这个拦截器允许的上传到action中的文件最大长度(以byte为单位). 注意这个参数和在webwork.properties中定义的属性没有关系,默认2MB
allowedTypes (
可选) - 以逗号分割的contentType类型列表(例如text/html),这些列表是这个拦截器允许的可以传到action中的contentType.如果没有指定就是允许任何上传类型.



2 jsp页面定义如下(testFileUpload.jsp)

    <s:form action="testFileUpload" method="post" enctype="multipart/form-data">
        
<s:file name="file"theme="simple"/>
        
<s:fielderror name="file"></s:fielderror>
        
<s:submit/>
    
</s:form>

3 后台的action声明如下(我用的是struts2的注解进行action配置)

public class TestFileUploadAction extends ActionSupport{
    
private File file;
    
private String fileContentType;
    
private String fileFileName;
    @Action(
            value = "testFileUpload", results = {
                @Result(name = "input", location = "/testFileUpload.jsp"),
                @Result(name = "success", location = "/testFileUploadSuccess.jsp")
            }
    )
    
public String execute() {
        
return SUCCESS;
    }
    get/set......

}

注意:如果jsp中file的name="xxx",那么后台action中的属性要做相应更改为
    private File xxx;
    
private String xxxContentType;
    
private String xxxFileName;
同时注意大小写一定要一致

4 定义错误文件类型的消息提示,这个需要用到struts2的资源文件,在struts.properties文件中加入

struts.custom.i18n.resources=globalMessages

globalMessages对应着资源文件名

5
在源文件夹下定义资源文件globalMessages.properties,并在里面加入如下信息:

struts.messages.error.content.type.not.allowed=upload file contenttype is invalidate


这里稍作说明(拷贝一下struts2的帮助):
如果你的action实现了ValidationAware接口(如果action继承了ActionSupport,那么就相当于实现了ValidationAware),这个拦截器就可以添加几种字段错误.这些错误信息是基于存储在struts-messages.properties文件中的一些i18n值,这个文件是所有i18n请求的默认文件.你可以在自己消息文件的复写以下key的消息文字

struts.messages.error.uploading - 文件不能上传的通用错误信息
struts.messages.error.file.too.large - 
上传文件长度过大的错误信息
struts.messages.error.content.type.not.allowed - 
当上传文件不符合指定的contentType



以上配置完毕后,测试一下,对于非法的contentType,例如xxx.log这个文件的的contentType是pplication/octet-stream
会给出提示:upload file contenttype is invalidate

struts2实现的文件上传(带文件类型和大小大小验证的) 用struts2实现的文件上传,带文件类型验证,大小限制,都是可以配置的,具体看你怎么配置了! 立即下载

相关推荐

从原理图到PCB:基于Allegro的8槽PXIe背板高速设计实战

本文详细介绍了基于Allegro软件进行8槽PXIe背板高速设计的完整实战流程。从理解规范、原理图设计、PCB布局规划,到高速PCIe差分对与精密时钟的布线艺术,再到电源与地处理以及最终的设计验证与生产文件输出,系统性地阐述了确保背板信号完整性、电源完整性和系统稳定性的关键技术与工程实践。

weixin_28312391的博客 202

application/octet-stream

当浏览器在请求资源时,会通过http返回头中的content-type决定如何显示/处理将要加载的数据,如果这个类型浏览器能够支持阅览,浏览器就会直接展示该资源,比如png、jpeg、video等格式。在某些下载文件的场景中,服务端可能会返回文件流,并在返回头中带上Content-Type:application/octet-stream,告知浏览器这是一个字节流,浏览器处理字节流的默认方式就是下载。 Application/octet-stream是应用程序文件的默认值。意思是未知的应用程序文件,浏览器一

qq_42582773的博客 7万+

Android SDK安装教程(超详细),从零基础入门到精通,从这篇开始_android sdk下载安装

Android SDK安装教程(超详细),从零基础入门到精通,从这篇开始_android sdk下载安装

Jinmindong 5010

前端接收 type: “application/octet-stream“ 格式的数据并下载,解决后端返回不唯一

前端接收 type: “application/octet-stream“ 格式的数据并下载,还有后端既返回octet-stream还返回JSON数据时的处理方法

qq_53145332的博客 5万+

Ambari 3.0.0 + BigTop 3.3.0 源码编译与集群部署指南(Kylin V10 / aarch64)

仅仅是针对“应用商店目录(Applications Catalog)”的一个外围附属子模块(它不是 YARN 监控大盘,不影响 YARN UI 网页的主体使用),我们可以采用。自带的 Node 二进制是 x86_64 版本,在 ARM64(aarch64)容器上无法执行(Exit value: 126)。:Ambari Server/Agent 使用 JDK 17,BigTop 大数据组件(Hadoop/HBase/Spark 等)使用 JDK 8。,源码中包含 x86 特定的原生二进制文件。

amumu1992的博客 481

SAP 批量修改 工艺路线 和 BOM

1、在运维的过程中经常会遇到用户需要批量更改组件,或者是批量更改数量,还是组件里面的一些标识,当处理这些批量数据处理的业务时,BOM的批量更改一个想到的就是CS20,但是CS20当BOM需要替换的时候就不是很适用。当前工作区域:选择 SAP_ITEM 对BOM行项目进行变更,工艺路线也是可以批量更改的,根据实际的业务进行选择,我这里选择的就是BOM的组件变更。5、本博客将使用新的一种方式进行BOM的批量变更,标准的事务代码:CEWB对BOM进行批量更改。3、使用LSMW的方式进行BOM的批量更改。

我小时候很黑的博客 4092

Application/octet-stream,http服务器设置响应头让浏览器下载内容

application 表明是某种二进制数据 application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf。audio 表明是某种音频文件 audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav。

robinson_911的专栏 5020

PostgreSQL 核心原理:大字段(大对象)是如何被压缩和存储的(TOAST存储机制)

PostgreSQL通过TOAST机制高效处理大字段存储问题,解决单行超过8KB页大小限制的挑战。TOAST采用透明分片、按需加载和自动压缩策略,支持TEXT、JSONB等变长类型,无需用户干预。其核心包括四种存储策略(plain/external/main/extended),自动将大字段分片存入专用TOAST表,主表仅保留指针。读取时按需解压拼接,支持部分加载优化。TOAST表结构包含chunk_id、序列号和分片数据,配合内置PGLZ压缩算法,平衡存储效率与访问性能。该机制使PostgreSQL能稳定

数据知道的博客 2623

解决 ​​application/octet-stream​​ 类型参数接收问题

根据你的情况,推荐优先使用方案一或方案二方案一简单快捷,适合快速解决问题方案二代码更规范,适合长期维护通过这些方法,你的后端就能正确接收和处理类型的 JSON 数据了。

小屁孩大帅-保密的博客 3372

锂电池的充电和放电曲线解读

锂电池充放电曲线是反映其性能的关键指标。充电曲线分为恒流和恒压两阶段:恒流阶段电压快速上升,恒压阶段电流逐渐降低;放电曲线则呈现平台期和快速衰减期特征。这些曲线受温度、充放电倍率及材料体系(如三元锂或磷酸铁锂)显著影响。通过分析曲线特征,可优化电池管理系统,实现精准的SOC估算、快充策略制定及故障诊断,从而在电池性能与安全性间取得平衡。不同应用场景(如新能源汽车或消费电子)对曲线形态有特定要求。

start_up_go的博客 5063

33、密码学中的选择密文攻击与Cramer - Shoup加密方案

本文详细介绍了密码学中选择密文攻击的背景及其对Cramer-Shoup公钥加密方案的影响。该方案在决策Diffie-Hellman假设和抗碰撞哈希函数的基础上,能够有效抵御自适应选择密文攻击,并且其安全性无需依赖随机预言机模型。文章还分析了Cramer-Shoup方案的设计原理、加密与解密过程,以及其在标准假设下的安全性证明方法。此外,通过一系列相关练习,帮助读者进一步理解密码学概念如密文不可区分性、ElGamal加密、Goldwasser-Micali方案等。最后,文章展望了密码学的未来发展趋势,包括量子

vscode6remote的博客 99

SpringBoot:使用application/octet-stream 流式上传大文件,解决Mutipartfile multipart/form-data上传产生临时文件问题

multipart的流不是HTTPRequest的流,而是服务器的临时文件流multipart/form-data是表单上传,接口可以从Mutipartfile对象获取输入流getInputStream,表面上看没产生临时文件org.springframework.web.multipart.support.StandardMultipartHttpServletRequest的getInputStream这里面的流是从DiskFileItem(一眼磁盘)拿的,还告诉了你临时目录位置location。

Oxye 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Struts2文件上传方式与上传失败解决方式

首先将几个对象弄出来第一个 上传页面第二个 上传action第三个 startut2配置文件 我的文字描述不是很好,但是终归是自己写出来的,后来我在网上看到一篇关于文件上传描述的非常清楚的文章, 链接地址是:http://www.blogjava.net/sxyx2008/archive/2009/10/22/299285.html,大家可以看看,真的挺详细,比我的好多了 jsp页面 ...

weixin_34130269的博客 312

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Struts2图片文件上传,判断图片格式和图片大小

1. 配置Struts2能够上传的最大文件大小 使用Struts2进行文件上传的时候,Struts2默认文件大小最大为2MB,如果要传大一点的文件,就需要修改struts.xml配置文件,重新设置能够上传的最大的文件大小。配置文件如下:

独家记忆 749

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

weixin_42374582的博客 518

jquery-form/struts2文件上传

转载:http://blog.youkuaiyun.com/Xwin1989/article/details/8979239 1、form /** *  */package com.test.controller; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java...

on the road 286

struts2单文件和多文件的上传和下载

1.    文件上传的原理: 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1)      application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式。 2)      multipart/form-data:这种编码方式的表单会以二进制流的方式

不忘初心的博客 1166

ExtJS4 上传文件类型和大小的判断方法(实例)

接本人博文《ExtJS4+strtus2文件上传实例 》,在上面的基础上加上ExtJS上传文件前对文件类型和文件大小进行判断,不符合要求的将不能被上传。 PS:本人的原创博文是在开发中遇到的一些常见问题或难题作记录。由于我是初学者,知识面还远远不够,所以可能有许多地方并不是很好的解决方案,希望朋友你有想法能给予答复。谢谢! 开始本文的方案描述(源码稍后传上): 一直没找到ExtJS4 fi

碧波之心——心如碧波,静如止水 7476

struts2 图片上传

为什么80%的码农都做不了架构师?>>> ...

weixin_33725126的博客 184

判断文件上传类型

MIME的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉 浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等

TimHee 1911

struts2文档上传与下载

页面(freemark页面): &nbsp;&nbsp;&nbsp;excle模板下载 //文件上传操作 function addOperatorUpload(){ var filepath=document.getElementById("filePath").value; if(''==filepath){ alert("请选择要上传的excle文...

hason3417509的博客 126

Struts2文件上传拦截器问题

在Struts2的文件上传过程中,可能会由于不同浏览器的兼容问题,导致文件上传拦截器对文件类型判断错误。出现Content-Type not allowed: file "xxxx.jpg" "xxxxxx.tmp" image/pjpeg类似的异常。           小编之前调试过各种方法,后面网上查资料说很可能是浏览器兼容性问题,于是就找了些资料,根据不同浏览器而需要在配置文件中配置不同

工院一小草的博客 525

Struts2上传文件之获得文件的名字和类型

Struts2开发中,上传文件是经常用到的,如何获得文件的真实名称和类型呢? 三个属性是我们注意的,如下:   1.类型为File的xxx属性:用来封装页面文件域对应的文件内容。(流的信息)   2.类型为String的xxxFileName属性:用来封装该文件域对应的文件的文件名。 3.类型为String的xxxContentType属性:用来封装该文件域应用的文件的文件类型。 ...

iteye_5019的博客 306

struts2文件上传获取文件名、文件类型

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33890499的博客 516

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

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

confirmAname的专栏 1093
上一篇: 运用jquery产生上中下对话框
下一篇: struts2的文件类型上传的详解
日依
博客等级 码龄15年 165粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值