IE与firefox限制文件上传类型的一点小区别及相应逻辑的小改进

本文介绍了一种在不同浏览器(如IE和Firefox)中统一文件上传类型验证的方法,通过使用文件MIME类型来确保文件类型的一致性,并提供了一种更简洁的验证逻辑。
做了一个上传组件以后,在IE中通过以下代码限制上传文件类型为jpg和png:
 1ExpandedBlockStart.gifContractedBlock.gif/**//// <summary>
 2InBlock.gif/// 判断是否合法的文件类型
 3InBlock.gif/// </summary>
 4InBlock.gif/// <param name="fu">文件上传组件的引用</param>
 5ExpandedBlockEnd.gif/// <returns>是否允许上传的文件类型</returns>

 6None.gifprivate bool FileTypeAllowed(FileUpload fu)
 7ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 8InBlock.gif    //是否合法的文件类型,通过FileUpload的ContentType属性来确定类型
 9InBlock.gif    string fileType = fu.PostedFile.ContentType.ToString().ToLower();
10InBlock.gif    if (fileType == "image/pjpeg"||fileType == "image/x-png"|| fileType == "image/gif"return true;
11InBlock.gif    return false;
12ExpandedBlockEnd.gif}
  第9行,用来判断文件的mine类型,根据判断结果返回是否允许上传的文件类型。在IE里测试一切正常。但是,到Firefox里上传,则显示为不允许上传的文件类型。原来,在firefox里,jpeg和png图形文件的mine类型表示与IE是有略微差别的,对应关系如下:
IEFirefox
image/pjpegimage/jpeg
image/x-pngimage/png
  知道了问题,解决方法就很简单了,修改以上代码为:
None.gifprivate bool FileTypeAllowed(FileUpload fu)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
//是否合法的文件类型,通过FileUpload的ContentType属性来确定类型
InBlock.gif
    string fileType = fu.PostedFile.ContentType.ToString().ToLower();
InBlock.gif    
if (fileType == "image/pjpeg"||fileType=="image/jpeg" || fileType == "image/x-png"||fileType=="image/png" || fileType == "image/gif"return true;
InBlock.gif    
return false;
ExpandedBlockEnd.gif}
这样子一来,判断表达式长多了,让人感觉很不爽。要是哪一天有那么十几种文件可以上传,每一种又要适应这两种服务器,那这个表达式的长度岂不是很“可观”?于是,做个小改进吧,把文件名像白名单一样列在一个string[]里,然后,逐个检测,如果不符合,立即返回true;全部检测未找到,则返回false。实现代码如下:
ExpandedBlockStart.gifContractedBlock.gif        /**//// <summary>
InBlock.gif        
/// 判断是否合法的文件类型
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="fu">文件上传组件的引用</param>
ExpandedBlockEnd.gif        
/// <returns>是否允许上传的文件类型</returns>

None.gif        private bool FileTypeAllowed(FileUpload fu)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            
//允许上传的文件类别列表
InBlock.gif
            string[] allowTypes = new string[]
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
"image/pjpeg",
InBlock.gif                
"image/jpeg",
InBlock.gif                
"image/x-png",
InBlock.gif                
"image/png",
InBlock.gif                
"image/gif"
ExpandedSubBlockEnd.gif            }
;
InBlock.gif            
InBlock.gif            
string fileType = fu.PostedFile.ContentType.ToString().Trim().ToLower();
InBlock.gif            
foreach (string allowType in allowTypes)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
//找到匹配类型,直接返回真,不再继续找
InBlock.gif
                if (allowType == fileType) return true
ExpandedSubBlockEnd.gif            }

InBlock.gif            
//遍历过了,但没有找到此类别,则返回false,不允许上传
InBlock.gif
            return false;
ExpandedBlockEnd.gif        }

None.gif
  以后,再要添加文件类别,只需要在allowTypes这个字符串数组中添加就OK了。

转载于:https://www.cnblogs.com/hzuIT/articles/755331.html

### 中职学校网络安全理论课程大纲和教学内容 #### 2025年中职学校网络安全理论课程概述 随着信息技术的发展网络安全已成为信息化社会的重要组成部分。为了适应这一需求,中职学校的网络安全理论课程旨在培养学生具备基本的网络安全意识和技术能力,使学生能够在未来的职业生涯中应对各种网络威胁。 #### 教学目标 该课程的目标是让学生理解网络安全的基本概念、原理和技术手段,掌握常见的安全防护措施,并能应用这些知识解决实际问题。具体来说,学生应达到以下几点: - 掌握计算机网络基础架构及其工作原理; - 理解信息安全管理体系框架及其实现方法; - 学习密码学基础知识以及加密算法的应用场景; - 能够识别常见攻击方式并采取有效防御策略; #### 主要章节安排 ##### 第一章 计算机网络与互联网协议 介绍计算机网络的基础结构和服务模型,重点讲解TCP/IP五层体系结构中的各层次功能特点,特别是传输控制协议(TCP)和用户数据报协议(UDP)[^1]。 ##### 第二章 信息系统安全保障概论 探讨信息系统的脆弱性和风险评估机制,阐述如何通过物理隔离、访问控制等措施来保障系统安全性。 ##### 第三章 密码学入门 讲述对称密钥体制和非对称密钥体制的区别与发展历程,分析公钥基础设施(PKI)的工作流程及其重要性。 ##### 第四章 防火墙技术与入侵检测系统(IDS) 解释防火墙的作用原理及其分类形式(包过滤型、代理服务器型),讨论IDS的功能特性及部署建议。 ##### 第五章 Web应用程序安全 针对Web环境下的特殊挑战展开论述,如SQL注入漏洞利用、跨站脚本(XSS)攻击防范等内容。 ##### 实践环节设置 除了上述理论部分外,在每学期还设有专门实践课时用于模拟真实环境中可能遇到的安全事件处理过程,增强学生的动手操作能力和应急响应水平。 ```python # Python代码示例:简单的MD5哈希函数实现 import hashlib def md5_hash(text): hasher = hashlib.md5() hasher.update(text.encode('utf-8')) return hasher.hexdigest() print(md5_hash("example")) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值