Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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或.htm文件_Html_Asp.net Mvc_Input Type File - Fatal编程技术网

如何强制输入类型文件仅接受.html或.htm文件

如何强制输入类型文件仅接受.html或.htm文件,html,asp.net-mvc,input-type-file,Html,Asp.net Mvc,Input Type File,在这里,我试图通过点击按钮上传html/htm文件。为此,我使用“input type=file”,我已将其“accept”属性设置为仅接受html/htm扩展,如下所示: <input type="file" name="htmla" id="htmla" accept="text/html" /> 但它在不同的浏览器中表现出不同的行为 在firefox中,它接受所有文件 在chrome中,它接受html和图像 在IE中,与firefox相同 有没有办法让它通过javascr

在这里,我试图通过点击按钮上传html/htm文件。为此,我使用“input type=file”,我已将其“accept”属性设置为仅接受html/htm扩展,如下所示:

<input type="file" name="htmla" id="htmla" accept="text/html" />

但它在不同的浏览器中表现出不同的行为

在firefox中,它接受所有文件

在chrome中,它接受html和图像

在IE中,与firefox相同

有没有办法让它通过javascript或jquery等方法只接受html/htm文件


注意:我在MVC4中使用这个控件

这是HTML5特有的属性。并非所有浏览器都支持它。如果没有,则必须在服务器上执行检查。另一种可能是检查使用javascript选择的文件的扩展名。基本上,您可以获得如下所选文件名:
$('#htmla').val()
。然后是扩展名的regex。


<script>
  function test(obj,filter){

    var file = obj.value.match(/[^\/\\]+$/gi)[0];
    var rx = new RegExp('\\.(' + (filter?filter:'') + ')$','gi');
    if(filter&&file&&!file.match(rx)){
      alert("check the file type, only html is accepted");
      //input file
      //it's totally a bad idea...
      //document.body.innerHTML = "<input type='file' onchange=\"test(this,'html');\" >";

    }
  }
</script>
<body>
    <input id="inputFile" type="file" onchange="test(this,'html');">
</body>
功能测试(obj、过滤器){ var file=obj.value.match(/[^\/\\]+$/gi)[0]; var rx=new RegExp('\\.('+(过滤器?过滤器:'+'))$,'gi'); if(过滤器和文件和文件匹配(rx)){ 警报(“检查文件类型,仅接受html”); //输入文件 //这完全是个坏主意。。。 //document.body.innerHTML=“”; } }

也许这应该适合您

在标准输入控制中,您无法实现它

是的,在文件输入控件上有一个
“accept”
属性,您可以在其中指定所需的文件类型,但许多浏览器无法识别。因此,最好的方法是检查用户使用Javascript或Jquery选择的文件的文件名(扩展名)

function ValidateFile() {
        var fileName = document.getElementById("inputFileId").value
        if (fileName == "") {
            alert("upload a valid File with .htm extension");
            return false;
        }
        else if (fileName.split(".")[1].toUpperCase() == "HTM")
            return true;
        else {
            alert("Invalid File");
            return false;
        }
        return true;
    }

但是没有什么可以阻止用户将可执行文件重命名为
.html

document.body.innerHTML=
如果页面上有更多的元素,而只有输入元素,这是个坏主意。要么只替换输入元素,要么改变它的值。你的方法很好用……但我不知道该用哪种方法……你的还是@Sachin的……哪种更好?不管怎样,都不重要。您必须验证background.wt中的文件类型是否为true…所以我想我必须使用此方法,只有当您可以使用此方法时。这将对您有很大帮助,但正如我所说的,
不可能阻止用户将可执行文件重命名为.html
。因此,如果这不是您主要关心的问题,那么您可以使用它。:)我不知道应该使用什么方法。urs和@Scy给出的答案都很好。但哪一个更好?您可以尝试其中任何一个。Scy使用正则表达式做了同样的工作,我使用simple string.split做了同样的工作。所以这取决于你。如果您不需要更多的
if/else
,那么您可以尝试@scy solution.den我想我应该使用您的方法。它看起来很简单,并且很容易向其他人解释;)