我正在将一些文件存储在我的数据库中,因为我将它们以二进制格式存储而不保存任何其他信息,所以我必须确保它们都采用相同的格式以便我能够以后“服务”它们(如果有一个 简单的 方法从字节数组中推断出文件类型,请告诉我,但这不是重点)。
所以,我需要做的是验证上传的每个文件,以确保它符合所需的格式。
我已经设置了一个带有FileUpload控件和CustomValidator的FieldTemplate:
<asp:FileUpload ID="FileUpload" runat="server" />
<asp:CustomValidator
ID="CustomValidator1"
runat="server"
ErrorMessage="PDF only."
ControlToValidate="FileUpload"
OnServerValidate="CustomValidator1_ServerValidate">
</asp:CustomValidator>
我缺少的是放在CustomValidator1_ServerValidate方法中的代码,该方法检查上传的文件以确保其格式正确(在本例中为PDF)。
提前致谢。
答案 0 :(得分:4)
使用FileUpload.PostedFile.ContentType属性验证MIME类型(应为application / pdf)。出于安全原因,还要验证文件扩展名是否合适(.pdf)。您可以拥有一个静态哈希表,其中包含从MIME类型到文件扩展名的映射,并用作查询来验证扩展名。
答案 1 :(得分:4)
然而,我之前使用过一种解决方案。在我对PDF文件的简短测试中,我发现前3个字节总是相同的。我只尝试了前3个字节,因为它似乎已经足够了。前三个字节的值为:37,80,68。
所以我读取字节(InputFile1.FileContent.ReadByte()),将它们与上面的3个字节进行比较,如果它们相同,那么我有一个PDF文件。另外我在某处读到你应该关闭IIS中上传目录的脚本执行。希望它有所帮助。
答案 2 :(得分:2)
FileUpload.PostedFile.ContentType正是我所寻找的。 p>
只是提醒那些试图做同样事情的人:似乎PDF文件的MIME类型可以是“application / pdf”或“text / pdf”,所以一定要检查两者。 / p>
答案 3 :(得分:2)
用户可以欺骗它。在上面的解决方案中没有验证实际的字节内容。我可以发送给你可执行文件并将其伪装成pdf,但这不会发现它。