Author Archives: flanker017

Apache中强制指定文件解析类型的方法

在IIS中,可以很方便的规定文件的解析类型。比如一个网站里有上传模块,为了安全起见,如果没有特殊需求,最好将上传文件所在目录的解析类型强制全部指定为binary-octstream,用户在访问任何文件链接时均会直接下载到本机,而不会在服务器端解析后再返回。这样可以杜绝asp、php木马,提高安全性。
而在Apache中如何配置呢?一般情况下会首先想到AddType、Header set content-type或者.htaccess中采用Rewrite Engine。搜索这个问题也通常会得到这三种解释。但问题在于,如果你加载了mime_module,它有一个配置文件,TypesConfig conf/mime.types,在你的apache目录下打开这个文件,会看到很多预定义好的解析类型,Http Server文件解析会优先交给它来做。这样的话,前两种方法在mime_module模块存在下事实上是无效的。而.htaccess虽然可行,但如果我们想把所有的文件全部指定为octstream,每个文件类型都要写规则麻烦且不可行。那我们该如何方便快捷的去完成这个任务?
Continue reading

GDI+下的桌面截图并保存

虽然说是GDI+,但是只在最后保存文件的时候用到了。。。取页面信息还是GDI的那一套,这个是因为GDI+中没有C#的方便的CopyToScreen函数。。。
第一个函数GetEncoderClsid属于GDI+,根据类型参数返回编码方式,然后调用GDI+ Bitmap对象的Save函数保存文件。
GDI核心函数是BitBlt和GetDIBits,首先获得桌面窗口的DC,创建兼容的DC并选入兼容Bitmap,使用bitblt拷贝位图数据,通过兼容DC中的bitmap对象构造位图文件头信息,GetDIBits参考该文件头信息填充缓冲区,将兼容DC中的值写入位图文件,最后再调用GDI+进行保存。
GDI+可以提供转化到png bmp gif jpeg tiff等多种格式,而不仅仅是GDI的bmp。
以下是代码,注意调用时要首先初始化GDI+,否则可能在GetEncoderClsid中会出现Access Violation
Continue reading