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

时间:2013-03-15 07:09:32

标签: 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相同

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

注意:我在MVC 4中使用此控件

3 个答案:

答案 0 :(得分:3)

这是HTML5特定属性。并非所有浏览器都支持它。对于那些没有的人,您将不得不在服务器上执行检查。另一种可能性是检查使用javascript选择的文件的扩展名。基本上你可以得到如下所选的文件名:$('#htmla').val()。然后是正则表达式的扩展。

答案 1 :(得分:1)

<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>

也许这应该适合你swfupload

答案 2 :(得分:1)

标准输入控件中没有任何东西可以实现它。

是的,文件输入控件上有"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