Java 检测用户是否更改了要上载的文件扩展名?

Java 检测用户是否更改了要上载的文件扩展名?,java,servlets,file-upload,mime-types,Java,Servlets,File Upload,Mime Types,使用Javaservlet,是否可以检测文件的真实文件类型,而不考虑其扩展名 场景:您只允许上载纯文本文件(.txt和.csv)。用户获取文件mypicture.jpg,将其重命名为mypicture.txt并继续上载文件。您的servlet只需要文本文件,并在尝试读取jpg时崩溃 显然,这是用户错误,但是有没有办法检测到它不是纯文本并且不继续?没有。没有办法知道您正在上载的文件类型。在对文件执行任何操作之前,必须在服务器上进行所有验证。否。无法知道上载的文件类型。在对文件执行任何操作之前,必须

使用Javaservlet,是否可以检测文件的真实文件类型,而不考虑其扩展名

场景:您只允许上载纯文本文件(.txt和.csv)。用户获取文件mypicture.jpg,将其重命名为mypicture.txt并继续上载文件。您的servlet只需要文本文件,并在尝试读取jpg时崩溃


显然,这是用户错误,但是有没有办法检测到它不是纯文本并且不继续?

没有。没有办法知道您正在上载的文件类型。在对文件执行任何操作之前,必须在服务器上进行所有验证。

否。无法知道上载的文件类型。在对文件执行任何操作之前,必须在服务器上进行所有验证。

您可以使用内置API执行此操作。尽管它可以检测到的内容类型非常有限,但您可以更好地使用第三方库,如

另见:

您可以使用内置API来实现这一点。尽管它可以检测到的内容类型非常有限,但您可以更好地使用第三方库,如

另见:

    • 您所说的“纯文本文件”到底是什么意思?由中文文本组成的文件是纯文本文件吗?如果您假定英文文本为ASCII或ANSI编码,则必须将完整文件作为二进制文件读取,并检查e。G所有字节值都在,比如说,32到127加上13、10、9,可能是这样。

      你所说的“纯文本文件”到底是什么意思?由中文文本组成的文件是纯文本文件吗?如果您假定英文文本为ASCII或ANSI编码,则必须将完整文件作为二进制文件读取,并检查e。G所有字节值介于32、127和13, 10, 9之间。

      < P>我认为你应该考虑为什么你的程序在给出一个JPEG(比如说)时会爆炸,并对此进行防御。例如,一个JPEG文件可能有明显很长的行(CR LF的任何LF都将随机传播)。但是一个所谓的文本文件同样有可能导致程序瘫痪的长线,

      我想你应该考虑一下当你给出一个JPEG(比如说)的时候,你的程序可能会爆炸。例如,一个JPEG文件可能有明显很长的行(CR LF的任何LF都将随机传播)。但是一个所谓的文本文件同样可能有很长的行,这可能会杀死你的程序