25

我正在使用输入类型 =“文件”,现在我的要求是我只想选择 png 图像,即当我选择浏览时应该应用“png”过滤器。

我已经提到www.w3schools.com/tags/att_input_accept.asp,下面是我正在使用的代码,这适用于 Chrome,但不适用于 Firefox 和 IE。

请谁能帮我理解我必须做错什么?

 <h2>Below uses accept="image/*"</h2>
 <input type="file" name="pic1" accept="image/*" /> 

 <h2>Below I need to accept only for png</h2>
 <input type="file" name="pic1" accept="image/png" /> 

​这里有一个小提琴链接http://jsfiddle.net/Jcgja/2/

4

6 回答 6

21

您需要通过 java 脚本对其进行验证。下面是java脚本验证的代码

function CheckFileName() {
        var fileName = document.getElementById("uploadFile").value
        if (fileName == "") {
            alert("Browse to upload a valid File with png extension");
            return false;
        }
        else if (fileName.split(".")[1].toUpperCase() == "PNG")
            return true;
        else {
            alert("File with " + fileName.split(".")[1] + " is invalid. Upload a validfile with png extensions");
            return false;
        }
        return true;
    }
于 2012-04-30T10:55:45.530 回答
6

w3schools 该页面上的浏览器支持信息不正确。

如果你检查这个页面,你会看到accept它没有在 Firefox 中实现的属性:

https://developer.mozilla.org/en/HTML/Element/Input

更新:
accept属性现已在 Firefox 中实现,但没有最新版本的用户仍然无法获得支持。

于 2012-04-30T10:29:08.480 回答
1

如您所见,任何主要浏览器都不正确支持“接受”属性。您可以在表单 onsubmit 事件上使用 javascript 验证来验证文件类型是否正确,否则返回 false。

不要将此属性用作验证工具。文件上传应在服务器上进行验证。

于 2012-04-30T10:21:34.477 回答
1
<?php
if ((($_FILES["pic1"]["type"] == "image/png")
{
if ($_FILES["pic1"]["error"] > 0)
{
echo "Error: " . $_FILES["pic1"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["pic1"]["name"] . "<br />";
echo "Type: " . $_FILES["pic1"]["type"] . "<br />";
echo "Size: " . ($_FILES["pic1"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["pic1"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?>

这只是对文件类型的验证。不是整个上传脚本。

于 2012-04-30T11:11:18.957 回答
0

您可以使用文件函数的 javascript 函数 onChane 事件

filesChange() {
        checkFile();
        } 
<script type="text/javascript">
function checkFile() {
    var fileElement = document.getElementById("uploadFile");
    var fileExtension = "";
    if (fileElement.value.lastIndexOf(".") > 0) {
        fileExtension = fileElement.value.substring(fileElement.value.lastIndexOf(".") + 1, fileElement.value.length);
    }
    if (fileExtension == "gif") {
        return true;
    }
    else {
        alert("You must select a GIF file for upload");
        return false;
    }
}

于 2013-10-22T10:27:45.580 回答
0

正如评论中所指出的,接受的解决方案不适用于带有多个“。”的文件名。在里面。这应该可以更好地处理它,它更防错且更灵活,并且您可以通过编辑 array 来管理接受的扩展

function checkFileExtension() {
    var fileName = document.getElementById("uploadFile").value;

    if(!fileName)
      return false;

    var extension = fileName.split(".");
    if(extension && extension.length > 1){
        extension = [extension.length-1].toUpperCase();
        if (["PNG"].indexOf(extension) != -1)
            return true;
        else{
            alert("Browse to upload a valid File with png extension");
            return false;
        }
    }
    else{
        alert("Browse to upload a valid File with png extension");
        return false;
    }
}
于 2015-12-17T16:25:10.297 回答