Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery或JavaScript:获取客户端文件的MIME类型_Javascript_Jquery_Mime Types - Fatal编程技术网

jQuery或JavaScript:获取客户端文件的MIME类型

jQuery或JavaScript:获取客户端文件的MIME类型,javascript,jquery,mime-types,Javascript,Jquery,Mime Types,我希望使用jQuery或JavaScript在应用程序的客户端检测文件的MIME类型。有办法做到这一点吗? 谢谢。您可以使用AJAX,发出HEAD请求,并检查内容类型的响应头。但这只有在从HTTP服务器获取文件时才有效 要获取使用HTML文件选择器选择的文件的MIME类型,而不提交任何内容,请尝试: document.getElementById('fileChooserID').files[0].type // e.g. image/png 示例 尝试选择一个图像,检查MIME类型,然后

我希望使用jQuery或JavaScript在应用程序的客户端检测文件的MIME类型。有办法做到这一点吗?
谢谢。

您可以使用AJAX,发出HEAD请求,并检查
内容类型的响应头。但这只有在从HTTP服务器获取文件时才有效


要获取使用HTML文件选择器选择的文件的MIME类型,而不提交任何内容,请尝试:

document.getElementById('fileChooserID').files[0].type // e.g. image/png
示例

尝试选择一个图像,检查MIME类型,然后尝试提交它。然后尝试其他非映像的方法。

可靠检测mime类型的唯一方法是在服务器端解析文件,确认它是用户声称的类型,或者符合允许的类型列表。需要考虑的事项:

1-JavaScript限制了对本地文件系统的访问,这是有充分理由的

2-您不能信任从浏览器接收的mime类型。它不一定与所发送文件的mime类型匹配


3-在允许用户上载符合允许类型的“白名单”的文件的情况下,验证可能无论如何都是必要的-考虑到应用程序可能必须实际处理文件,而不仅仅是存储文件,这至少需要解析文件头以获取运行长度等信息(对于视频)版本号(对于Word文档)等等。

这个想法不是对浏览器的信任。这个想法是在服务器端执行此验证,但是,如果在将20MB文件发送到浏览器之前,由于服务器中的规则,下一次被拒绝,那么这是一件非常有用的事情……因此,最好“预先检查”此文件是否“是候选文件”要上传,最终验证将在服务器上执行。

那么,您的意思是:允许用户在文件选择器中选择一个文件,但不发送任何内容,而是确定MIME类型?我将编辑我的答案以允许。对不起,我想我解释得不够清楚。用户输入一个以file:///开头的图像url,然后输入image在页面上使用标记显示。我想知道MIME类型,以便确保它是有效的图像。哦,当然,我的第二个答案完全符合您的要求。给我几分钟;我将编写一个演示。唯一的问题是,我没有使用文件输入,而是使用一个url文本框,有点像浏览器中的url框。如果您使用文本输入框中,出于安全原因,浏览器不会公开有关文件名的任何信息(甚至不会将其视为文件条目)。据我所知,从浏览器获取此类信息的唯一方法是使用文件输入和一些JavaScript。这是非常正确的。一个想欺骗服务器的半聪明用户可能会欺骗MIME类型。服务器应始终通过魔术对文件类型进行双重检查。