在这里,我试图上传html/htm文件点击一个按钮。为此,我使用了“input type=file”属性,将其“接受”属性设置为只接受html/htm扩展,如下所示:
<input type="file" name="htmla" id="htmla" accept="text/html" />
但是它在不同的浏览器中表现出不同的行为。
在firefox中,它接受所有文件。
在chrome中,它接受html和图像。
在IE中,与firefox相同
有没有办法让它通过javascript或jquery这样的方法只接受html/htm文件?
注意:我在MVC 4中使用此控件。
发布于 2013-03-15 07:20:30
标准输入控制中没有任何东西可以用来实现它。
是的,在文件输入控件上有一个"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
。
发布于 2013-03-15 07:14:46
这是HTML5特定的属性。并不是所有的浏览器都支持它。对于那些没有执行检查的人,您必须在服务器上执行检查。另一种可能是检查使用javascript选择的文件的扩展名。基本上,您可以像这样获得所选的文件名:$('#htmla').val()
。然后是扩展的正则表达式。
发布于 2013-03-15 07:17:10
<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>
也许这应该是给你的斯夫普拉
https://stackoverflow.com/questions/15426674
复制相似问题