使用Java servlet,是否可以检测文件的真实文件类型,无论其扩展名如何?
场景:您只允许纯文本文件上传(.txt和.csv)用户获取文件mypicture.jpg,将其重命名为mypicture.txt并继续上传文件。你的servlet只需要文本文件,并试图读取jpg。
显然这是用户错误,但有没有办法检测到它不是纯文本而不是继续?
答案 0 :(得分:6)
您可以使用内置的URLConnection#guessContentTypeFromStream()
API执行此操作。然而,它可以检测到的内容类型非常有限,您可以更好地使用第三方库,如jMimeMagic。
答案 1 :(得分:3)
没有。无法知道您上传的文件类型。在对文件执行任何操作之前,您必须在服务器上进行所有验证。
答案 2 :(得分:1)
我认为你应该考虑为什么你的程序在给出JPEG(比如说)时可能会爆炸并且防止这种情况发生。例如,JPEG文件可能具有明显非常长的行(CR LF的任何LF将随机扩散)。但是所谓的文本文件同样可能会有很长的行,可能会杀死你的程序,
答案 3 :(得分:0)
“纯文本文件”究竟是什么意思?包含中文文本的文件是纯文本文件吗?如果您假设使用ASCII或ANSI编码的英文文本,则必须将完整文件作为二进制文件读取,并检查e。 G。所有字节值介于32和127之间,加上13,10,9,也许。