如何强制输入类型文件仅接受.html或.htm文件
在这里,我试图通过点击按钮上传html/htm文件。为此,我使用“input type=file”,我已将其“accept”属性设置为仅接受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
<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我想我应该使用您的方法。它看起来很简单,并且很容易向其他人解释;)