分类: 程序开发

关于Asp.Net中FileUpload控件属性PostedFile.ContentType的提示

PostedFile.ContentType这个属性通常用来判断上传文件的MIME类型,我们通常以此来拒绝某些类型的上传,比如仅允许上传图像文件,然而这个属性其实是很不稳定的:   MIME类型没有统一 假如我们希望仅允许上传jpg文件,那么通常做法就是判断上传文件的ContentType是否为“image/jpeg”,不是则拒绝,着看起来很简单,但是实际上这个网站通过Chrome浏览和使用时不会有问题,但使用IE(测试时使用的是IE8)上传jpg文件就会遭拒了,经过调试,发现IE上传时的ContentType是“image/pjpeg”。 这还仅限于两个浏览器、一种文件格式的情况,如果是多家浏览器多种文件格式的话,要兼顾就有得头疼了。 在我简单的几下测试中,发现的其他区别有: png文件Chrome提交的ContentType为image/png,而IE提交为image/x-png zip、rar、msi等文件使用Chrome提交的ContentType都为null,IE可以正确获取   可靠性与安全性低 由上一个问...

更多

递归选取扩展方法(RecursionSelect)的新重载形式

RecursionSelect是一个极其方便的扩展方法,使用它仅需少量代码即可完成递归操作,从而大大提升编码速度和质量,此扩展方法在我的代码中被高频使用,这是我之前提供过的一个范例: [TestMethod] public void TestMethod13() { //获取指定目录中所有包含子目录的目录集合 var d = new DirectoryInfo(@”C:UsersPublicDownloads”); var c = d.RecursionSelect(f => f.GetDirectories(), f => f.GetDirectories().Length > 0); MessageBox.Show(c.Count().ToString()); } 此方法源于鹤冲天的这篇文章:http://www.cnblogs.com/ldp615/archive/2009/11/09/1599312.html 我曾在我的这篇文章中分享过我自己的实现版本(即RecursionSelect):http://www.cnblogs.com/SkyD/archive/...

更多

Asp.Net复合控件疑难与解决——尴尬的生命周期

今天打算用Asp.Net复合控件技术制作一个服务器端的文件管理控件,基本实现构想如下: 设置一个属性,通过该属性指定此控件所管理的根目录路径 递归向下扫描指定的根目录下的所有子目录及文件,用TreeView控件将其显示出来 使TreeView显示复选框,用以勾选待处理文件,然后做进一步处理(复制、移动、删除) 在TreeView中单击某项后,可以对其进行重命名操作,也可以指示将勾选的文件复制、移动到所选目录中 TreeView基本效果如下图: 在页面上直接堆控件进行了一番测试,基本没有问题,于是就开始着手创建复合控件了,然而却遭遇连番郁闷……   RenderContents()的尴尬 首先我老老实实的在CreateChildControls()方法中书写了创建和添加TreeView控件的代码。 然后在RenderContents()方法中开始扫描目录结构、更新到TreeView控件中,然后输出控件,然而却出现了很奇怪的现象: 已在CreateChildControls()方法中设定了TreeView的ExpandDepth属性为1,也就是说TreeV...

更多

关于Db4o的查询测试及疑惑

在Entity Framework中,我们通过Take()方法可以仅取得指定数量的数据,并且Entity Framework也只是从数据库中取出指定数量的数据而直接返回。 而Db4o虽然也可以在原生查询(NQ)之后追加Take()方法,但是经我测试认为其工作方式仍然是将所有数据先取出,然后再从所有数据中返回前五条……   测试过程 首先建立两个简单的类,用于对比测试: public class 男人{    public 男人(int 年龄)    {        this.年龄 = 年龄;    }    public int 年龄 { get; set; }    public override string ToString()    {     &...

更多

Db4o结合Linq、Lambda表达式的简单示例

大多数人接触Db4o的查询,都是从“样本查询”(Query by Example)开始的,这种查询方式简单但不方便,功能和性能也很受局限。以下是引自官方的样本查询示例: // retrievePilotByName Pilot proto=new Pilot(“Michael Schumacher”,0); ObjectSet result=db.get(proto); listResult(result); 这种查询要求我们先建立一个样本,然后再交由Db4o根据此样本返回符合条件的数据,其主要的不便之处在于对类默认值的处理及组合条件查询上,同时其执行性能是很差的。 而当Db4o开始支持.Net 3.5之后,我们就有了更为简单且又十分方便而强大的选择了,让我们来一起领略Db4o与.Net 3.5擦出的火花之美吧:   准备工作 首先创建一个命令行应用程序。 书写一个简单的“学生”类: public class 学生{    static Random R = new Random();  ...

更多

WinForm实现鼠标悬停显示控件

在某些需频繁操作的环节中,为提高效率、减少劳动,可以在操作细节上下功夫,以带来更好的用户体验。 今天介绍的鼠标悬停显示功能就是一例,看似仅仅节省了一次点击,实则在繁复操作中能够为用户节约很多体力,提高舒适度。 本例中的基本需求是: 鼠标移入设置区域后,直接弹出详尽设置内容,并当进行了设置或鼠标移出弹出的设置区域后,自动关闭弹出的设置区域。 在这里,我设计了5个按钮,以及一个日历控件,该日历控件就作为我们的详细设置内容,将其Visible属性设为False以隐藏。 为5个按钮同时注册MouseEnter事件: 编写MouseEnter事件处理函数: private void button1_MouseEnter(object sender, EventArgs e) { monthCalendar1.Location = (sender as Control).Location; monthCalendar1.Show(); monthCalendar1.BringToFront(); monthCalendar1.Tag = sender; } 代码中首先将日历控件的坐标设为与触发事件...

更多

Eclipse 3.6 更新中文语言包的方法

在网上找3.6版的中文包更新方法,总是找不到,找到的大都是3.3、3.4的更新方法: 看到论坛里太多的人要eclipse的中文语言包,但自从3.2.1之后官方不提供单独的下载,所以很多朋友用了3.3.x的版本,原来的语言包插件都不能使用了。今天到eclipse官方查资料,看到了一个新的子项目Babel  (网址:http://www.eclipse.org/babel/downloads.php)按照官方介绍可以下载到最新的语言插件包,在此将这个消息告诉大家,希望对大家有所帮助。注:到我发帖为止我只看到官方提供在线更新的方式提供下载。 用eclipse3.3.x里自己带的software updates升级地址填写http://download.eclipse.org/technology/babel/update-site/就可以了!然后出列表后选择一下简体中文就可以了!eclipse ->Help ->software updates -> Find and Install ->Search for new features to install ...

更多

Android 系统缺陷不完全点评

前些时间入手了HTC G7 Desire和MOTO Milestone,把玩了一阵了,对Android系统总体感觉不错,但有很多细节会让人恼火到骂娘,我很不明白制作出如此优秀系统的团队为何会犯这些低级愚蠢的错误,且在这么多个版本更新中都没有修正,在此点评一下,期待改进并期待与大家探讨。   程序不能装到存储卡 这是此系统最知名的问题了吧,也是最傻的问题之一,要等到2.2版才能解决,而目前市面上升到2.2的只有Google自家的NEXUS ONE,其他手机都在苦苦等待中……   手机ROM剩余空间不多时无法查阅和编写短信 不能装软件到存储卡,那么ROM空间就很紧张了,更可恨的是Android居然会在ROM空间剩余大约10M以内之后的某些情况下禁用短信功能,短信能收不能读,也不能写新短信。 这时候要想看短信或写短信,要么删别的短信,要么删软件… 这做法简直太愚蠢了,不知道Google是怎么想的。 首先短信占用空间极少,就算一条短信占100k,那么10M也能存个100多条吧?有必要这样杞人忧天吗?实际上一条短信连1k都到不了呢。 再者短...

更多

不良言论屏蔽方案探讨——自说自话方案

引言 你是否曾遇到过这样糟糕的体验: 你在一个网页表单中,用心填写好所有项目后,点提交按钮时被告知“您提交的内容中有敏感信息,请检查!”,而你急得抓破头皮也找不到所谓的“敏感信息”在哪,几经修改也还是一样,致使根本无法提交内容; 更糟糕的网站甚至提交后转到其他页面才告知你有“敏感信息”,而此时你想重试的话只能重新填写整个表单! 显然,这些网站有些过敏了,但或许有网站主确实就是抱着“宁可错杀一千,绝不姑息一个”的想法来做的,这点在我国可以理解;不过就用户体验方面来说,我觉得用脏话回敬他们一点都不过分,因为他们完全不尊重用户体验,浪费用户的时间,给用户带来恼怒和困扰。 这里我提供一种简单易行的方案,可以兼顾网站安全和用户体验,我称之为“自说自话方案”。   简述 简而言之,这种方案就是让用户自言自语。 在用户提交内容时,如果我们认为内容包含不良信息,就将其设为“仅发布者可见”,这样发布者完全不知道自己的信息被屏蔽,就不会产生上述困扰,而网...

更多

网页内嵌Windows Media Player播放器的多文件播放方法

网页内嵌Media Player播放器很简单,以下代码即可完成一个简单的播放器: <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml”> <head> <meta content=”text/html; charset=utf-8″ http-equiv=”Content-Type” /> <title>音乐播放器÷</title> </head> <body> <object height=”200″ type=”video/x-ms-wmv” width=”200″> <param name=”filename” value=”C:UsersSkyDMusicGroove Coverage...

更多