源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

asp.net 下载文件时根据MIME类型自动判断保存文件的扩展名

  • 时间:2020-02-16 01:36 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:asp.net 下载文件时根据MIME类型自动判断保存文件的扩展名
引言 用WebClient下载远程资源时,经常会遇到类似这样的网址: http://www.uushare.com/filedownload?user=icesee&id=2205188 http://www.guaishow.com/u/luanfujie/g9675/ 我们不知道这个Url具体代表的是一个网页,还是某种类型的文件。 而有些Url虽然带有扩展名,但可能是错误的扩展名,常见的比如把gif文件标上了jpg扩展名。 如果我们没法正确判断下载源的文件类型的话,就无法保存为正确的文件格式,会给后续操作及人工阅览造成困扰。 所幸的是,WebRequest可以给出下载源的MIME信息,这让我们可以确定文件的真实格式,并以此来决定最终的存储扩展名。([url=http://www.w3school.com.cn/media/media_mimeref.asp]MIME是什么?[/url]) [b]建立MIME映射字典[/b] 我们首先需要做的工作就是建立一个MIME类型到其对应扩展名的映射字典。 我从网上找来了一个MIME类型列表,并通过正则表达式将其转换为程序代码,粘入了程序中: [img]http://files.jb51.net/upload/2009-11/20091112231022527.png[/img]   这个通过正则表达式转换而来的代码量非常大。 需注意的是,其中有很多MIME类型相同但扩展名不同的数据,我们在添加到字典时就将多余的不必要记录忽略了,比如高亮处的那三条都是audio/x-aiff类型,那么后两个扩展名都不会添加到字典中,也不会在后续的操作中被使用。 如果你觉得有些类型添加的对应扩展名不是最常见的对应类型的话,就得手动调整代码了。(下文中就出现了这种情况,如text/html对应的是dhtml扩展名,image/jpeg对应的是jpe扩展名) 字典构建完毕之后,就可以通过这样一个方法来获取MIME类型所对应的扩展名了: string 获取对应扩展名(string ContentType) { foreach (var f in MimeDic.Keys) { if (ContentType.ToLower().IndexOf(f) >= 0) return MimeDic[f]; } return null; } 这里之所以使用IndexOf方法判断,是因为传入的ContentType中可能还包含其他信息,比如编码格式。 题外话:看到网上曾有人抱怨说WebClient下载网页时容易产生乱码,而且又不好读取网页的编码格式,其实WebRequest的ContentType中就包含MIME和编码格式信息: [img]http://files.jb51.net/upload/2009-11/20091112231022199.png[/img]   生成下载文件路径 现在有了上面的方法,我们就可以通过MIME类型确定文件的扩展名了。 现在我们将书写一个用于生成下载文件路径的方法,其功能为: 分析文件的源Url,将其文件名部分作为下载文件的文件名。 如果其Url中不含文件名部分(域名或目录形式),则以其目录名为下载文件的文件名。 根据传入的MIME类型自动确定并替换Url中的原始扩展名(如果有的话),以用作下载文件的文件名。 判断传入的存储目录中是否已存在与下载文件名相同的文件,存在的话就进行重命名,直到没有同名文件为止。 功能有点多了,不适合做范例,不过还是很实用的,所以这里就顺道分享出来。 其代码为:
[url=http://xiazai.jb51.net/200911/yuanma/asp.net_mime_down.rar]http://xiazai.jb51.net/200911/yuanma/asp.net_mime_down.rar[/url] 转载[url=http://skyd.cnblogs.com/]http://skyd.cnblogs.com/[/url]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部