Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.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
Html <;输入类型=";文件"&燃气轮机;按扩展名限制可选文件_Html_Input Type File - Fatal编程技术网

Html <;输入类型=";文件"&燃气轮机;按扩展名限制可选文件

Html <;输入类型=";文件"&燃气轮机;按扩展名限制可选文件,html,input-type-file,Html,Input Type File,如何通过扩展名限制可以使用input type=“file”元素选择的文件 我已经知道accept属性,但在chrome中,它通过定义的最后一个MIME类型(在本例中为“gif”)来限制文件,而FF4甚至不限制任何内容 <input type="file" accept="image/jpg, image/gif"> 我做错了什么,还是有其他方法?老实说,限制文件的最好方法是在服务器端。人们可以在客户端伪造文件类型,因此在服务器传输时输入完整的文件名,解析出文件类型,然后返回消

如何通过扩展名限制可以使用input type=“file”元素选择的文件

我已经知道accept属性,但在chrome中,它通过定义的最后一个MIME类型(在本例中为“gif”)来限制文件,而FF4甚至不限制任何内容

<input type="file" accept="image/jpg, image/gif">


我做错了什么,还是有其他方法?

老实说,限制文件的最好方法是在服务器端。人们可以在客户端伪造文件类型,因此在服务器传输时输入完整的文件名,解析出文件类型,然后返回消息通常是最好的选择。

注意:这个答案是从2011年开始的。这在当时是一个非常好的答案,但截至2015年,大多数浏览器都支持原生HTML属性,所以(通常)没有必要在JS中实现这种定制逻辑。见和


在上传文件之前,可以使用Javascript检查文件的扩展名,如果不匹配,可以阻止提交表单。要上载的文件名存储在表单元素的“值”字段中

下面是一个仅允许上载以“.gif”结尾的文件的简单示例:

<script type="text/javascript">
    function checkFile() {
        var fileElement = document.getElementById("uploadFile");
        var fileExtension = "";
        if (fileElement.value.lastIndexOf(".") > 0) {
            fileExtension = fileElement.value.substring(fileElement.value.lastIndexOf(".") + 1, fileElement.value.length);
        }
        if (fileExtension.toLowerCase() == "gif") {
            return true;
        }
        else {
            alert("You must select a GIF file for upload");
            return false;
        }
    }
</script>

<form action="upload.aspx" enctype="multipart/form-data" onsubmit="return checkFile();">
    <input name="uploadFile" id="uploadFile" type="file" />

    <input type="submit" />
</form>

函数检查文件(){
var fileElement=document.getElementById(“上传文件”);
var fileExtension=“”;
如果(fileElement.value.lastIndexOf(“.”)大于0){
fileExtension=fileElement.value.substring(fileElement.value.lastIndexOf(“.”+1,fileElement.value.length);
}
if(fileExtension.toLowerCase()=“gif”){
返回true;
}
否则{
警报(“您必须选择要上载的GIF文件”);
返回false;
}
}
然而,这种方法并非万无一失。Sean Haddy是正确的,您总是希望在服务器端进行检查,因为用户可以通过关闭Javascript或在代码到达浏览器后编辑代码来击败您的Javascript检查。除了客户端检查之外,还要检查服务器端。此外,我还建议检查服务器端的大小,这样用户就不会因为2GB文件而使服务器崩溃(据我所知,如果不使用Flash或Java小程序或其他工具,就无法在客户端检查文件大小)

然而,使用我在这里给出的方法在手之前检查客户端仍然是有用的,因为它可以防止错误,并且对于非严重的损害是一种轻微的威慑

 function uploadFile() {
     var fileElement = document.getElementById("fileToUpload");
        var fileExtension = "";
        if (fileElement.value.lastIndexOf(".") > 0) {
            fileExtension = fileElement.value.substring(fileElement.value.lastIndexOf(".") + 1, fileElement.value.length);
        }
        if (fileExtension == "odx-d"||fileExtension == "odx"||fileExtension == "pdx"||fileExtension == "cmo"||fileExtension == "xml") {
         var fd = new FormData();
        fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);
        var xhr = new XMLHttpRequest();
        xhr.upload.addEventListener("progress", uploadProgress, false);
        xhr.addEventListener("load", uploadComplete, false);
        xhr.addEventListener("error", uploadFailed, false);
        xhr.addEventListener("abort", uploadCanceled, false);
        xhr.open("POST", "/post_uploadReq");
        xhr.send(fd);
        }
        else {
            alert("You must select a valid odx,pdx,xml or cmo file for upload");
            return false;
        }
       
      }

试过这个,效果很好

简单的方法是:

<input type="file" accept=".gif,.jpg,.jpeg,.png,.doc,.docx">


适用于除IE9之外的所有浏览器。我还没有在IE10+中测试过它。

+1。此外,我建议在服务器端代码中添加一些内容,以便在收到的文件太大时停止上载。@Allan很大程度上取决于技术。ASP.NET有一个“最大请求大小”,您可以在Web.config中指定。在其他语言中,编写从输入流读取请求并在一定字节数后停止的处理程序是可能的。这取决于你的应用程序。如果您想了解更多详细信息,请单独提问。+1,但请注意:这个答案有点过时,因为HTML5文件API允许在客户端完成更多的文件工作。一、 例如,我没有向上游发送文件,而是将文本加载到文本区域。事实上,服务器在收到文件时应该保持警惕。我认为最好同时做到这两个方面。给用户提供关于(不)可选择的文件的反馈,可以避免一些挫折。因为如果用户花半分钟精确地选择他需要的文件,然后发现这一切都是徒劳的。。你越早给他打电话越好。很好的建议,但问题并不是说这些文件会上传到任何地方。它甚至根本没有建议服务器的存在(例如在完全客户端应用程序的情况下)。如前所述,这个答案应该是一个评论,这是最好的答案。尽管大家都知道,您确实需要在服务器端正确地检查文件,但这种客户端JS检查对可用性很有好处——这意味着您可以提前警告用户可能出现的错误。您需要在检查之前在其中安装一个toLowerCase()comparison@MrTristan好建议。我已经添加了它。使用IE,您可以使用Scripting.FileSystemObject检查文件大小,但您需要在客户端浏览器中允许不安全的ActiveX。因此,是的,没有“好”的方法。
accept
在Firefox(截至31.0和32.0)中不起作用,在FF 37.0中测试。很好!。在文件输入的“接受”下,还可以定义要选择的文件的一般类型。例如,如果将“image/*”放在“accept”属性下,则限制将覆盖图像的所有标准文件格式(gif、jpeg等),而不仅仅是扩展名的类型。此外,还可以将预定义类型和扩展组合在一起。例如:“image/*,.swf”。对于本例,限制将包括所有标准图像文件和所有“.swf”文件。注意:用户始终可以从对话框的类型列表中选择“所有文件”…;-)这有助于在上传时对文件对话框进行一些过滤,但我肯定认为这也需要与服务器限制结合使用。@clockw0rk输入检查和安全性应该始终在服务器端实现。“接受”功能的存在只是为了帮助用户快速筛选相关文件,而不必筛选数千个不相关的文件。如果要上载文件,请记住还要在服务器上验证文件类型,因为客户端验证可能会被忽略。