这里特别感谢可爱的宋星小大叔以及武让小帅哥~~~~
其实是这样的 我之前用uploadify插件上传图片 虽然在前台限定了格式 但是宋星小大叔说可是跳过js代码上传木马之类的 在后台也得再验证一遍 并告诉我可以通过文件首部二进制来查看类型
于是俺跑去问武让小帅哥 看过他的几篇学习笔记 觉得他对这方面挺在行的
果然小帅哥很快就得出了结论 并找到了相应的文档
俺根据小帅哥的文档 几乎不用变动代码(其实就是米有变动..),通过了测试
这里他用了一个枚举类型存放类型和相应的ascii 俺要做的就是取流文件(图片上传后以流文件的形式在服务器端被接收)的前两字节 拿出来匹对下
俺的测试代码:
- [HttpPost]
- public ActionResult Register(HttpPostedFileBase fileData, string folder,FormCollection formCollection)
- {
- Stream fs = fileData.InputStream;
- //data存放前两字节的东西
- string data = fs.ReadByte().ToString();
- data += fs.ReadByte().ToString();
- FileExtension extension;
- try//转换成功,类型符合
- {
- extension = (FileExtension)Enum.Parse(typeof(FileExtension), data);
- }
- catch //转换失败,类型不符合
- {
- extension = FileExtension.VALIDFILE;
- }
- return View();
- }
- public enum FileExtension
- {
- JPG=255216,
- GIF=7173,
- PNG=13780,
- BMP=6677,
- VALIDFILE = 9999999
- }
帅哥的文档中还提及了txt格式
这里有一个很简单的方法:把给定的那个文件看作是无类型的二进制文件,然后顺序地读出这个文件的每一个字节,如果文件里有一个字节的值等于0,那么这个文件就不是文本文件;反之,如果这个文件中没有一个字节的值是0的话,就可以判定这个文件是文本文件了。
再次感谢两位帅哥~