这里我试图通过点击按钮上传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中使用此控件
答案 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
。