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

做了一个上传组件以后,在IE中通过以下代码限制上传文件类型为jpg和png:
 1 ExpandedBlockStart.gif ContractedBlock.gif /**/ /// <summary>
 2InBlock.gif/// 判断是否合法的文件类型
 3InBlock.gif/// </summary>
 4InBlock.gif/// <param name="fu">文件上传组件的引用</param>
 5ExpandedBlockEnd.gif/// <returns>是否允许上传的文件类型</returns>

 6 None.gif private   bool  FileTypeAllowed(FileUpload fu)
 7 ExpandedBlockStart.gifContractedBlock.gif dot.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.gif private   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.gif ContractedBlock.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值