在ASP.NET中验证上载文件的ContentType

时间:2008-11-18 22:39:22

标签: asp.net

我正在将一些文件存储在我的数据库中,因为我将它们以二进制格式存储而不保存任何其他信息,所以我必须确保它们都采用相同的格式以便我能够以后“服务”它们(如果有一个 简单的 方法从字节数组中推断出文件类型,请告诉我,但这不是重点)。

所以,我需要做的是验证上传的每个文件,以确保它符合所需的格式。

我已经设置了一个带有FileUpload控件和CustomValidator的FieldTemplate:

<asp:FileUpload ID="FileUpload" runat="server" />&nbsp;


<asp:CustomValidator
    ID="CustomValidator1"
    runat="server"
    ErrorMessage="PDF only."
    ControlToValidate="FileUpload"
    OnServerValidate="CustomValidator1_ServerValidate">
</asp:CustomValidator>

我缺少的是放在CustomValidator1_ServerValidate方法中的代码,该方法检查上传的文件以确保其格式正确(在本例中为PDF)。

提前致谢。

4 个答案:

答案 0 :(得分:4)

使用FileUpload.PostedFile.ContentType属性验证MIME类型(应为application / pdf)。出于安全原因,还要验证文件扩展名是否合适(.pdf)。您可以拥有一个静态哈希表,其中包含从MIME类型到文件扩展名的映射,并用作查询来验证扩展名。

答案 1 :(得分:4)

像阿里说的那样。这一切都可以被欺骗。获取.txt文件,将其重命名为pdf文件并尝试获取内容类型。它将是“application \ pdf”。

然而,我之前使用过一种解决方案。在我对PDF文件的简短测试中,我发现前3个字节总是相同的。我只尝试了前3个字节,因为它似乎已经足够了。前三个字节的值为:37,80,68。

所以我读取字节(InputFile1.FileContent.ReadByte()),将它们与上面的3个字节进行比较,如果它们相同,那么我有一个PDF文件。另外我在某处读到你应该关闭IIS中上传目录的脚本执行。希望它有所帮助。

答案 2 :(得分:2)

FileUpload.PostedFile.ContentType正是我所寻找的。

只是提醒那些试图做同样事情的人:似乎PDF文件的MIME类型可以是“application / pdf”或“text / pdf”,所以一定要检查两者。 / p>

答案 3 :(得分:2)

用户可以欺骗它。在上面的解决方案中没有验证实际的字节内容。我可以发送给你可执行文件并将其伪装成pdf,但这不会发现它。