HTML: 如何限制文件上传只是图像?

使用 HTML,如何限制可以上传的文件类型?

为了简化用户体验,我希望将文件上传限制为仅图像(jpeg、 gif、 png)。

<form method="post" action="..." enctype="multipart/form-data">
<label for="image">Photo</label>
<input name="image" type="file" />
</form>
212153 次浏览

编辑

如果事情是他们应该是,你可以通过“接受”属性这样做。

Http://www.webmasterworld.com/forum21/6310.htm

然而,浏览器几乎忽略了这一点,所以这是无关紧要的。简短的回答是,我不认为有一种方法可以在 HTML 中做到这一点。你只能在服务器端检查了。

下面这篇较早的文章提供了一些信息,可以帮助您进行选择。

文件输入接受属性-它有用吗?

您只能在服务器端安全地执行此操作。使用“接受”属性是好的,但是还必须在服务器端进行验证,以免用户能够不受限制地 cURL 到您的脚本。

我建议您: 丢弃任何非图像文件,警告用户,并重新显示表单。

最终,浏览器将设置“浏览”窗口中显示的筛选器。您可以在 Accept 属性中指定所需的所有筛选器,但是无法保证用户的浏览器将遵循该属性。

最好的办法是在服务器的后端执行某种过滤。

当然,永远不要相信客户端验证: 总是在服务器端再次检查..。

检查一个名为 Uploadify.http://www.uploadify.com/的项目

它是一个基于 Flash + jQuery 的文件上传器。这使用了 Flash 的文件选择对话框,可以过滤文件类型,同时选择多个文件,等等。

HTML5文件输入有接受属性和多个属性。通过使用多个属性,您可以在一个实例中上传多个图像。

<input type="file" multiple accept="image/*">

您还可以限制多个 mime 类型。

<input type="file" multiple accept="image/*,audio/*,video/*">

以及使用文件对象检查 mime 类型的另一种方法。

File 对象提供名称、大小和类型。

var files=e.target.files;


var mimeType=files[0].type; // You can get the mime type

还可以通过上述代码限制用户上载某些文件类型。

这里是图像上传的 HTML。默认情况下,它将显示图像文件只在浏览窗口,因为我们已经把 accept="image/*"。但是我们仍然可以从下拉菜单中更改它,它将显示所有文件。因此 Javascript 部分将验证所选文件是否为实际映像。

 <div class="col-sm-8 img-upload-section">
<input name="image3" type="file" accept="image/*" id="menu_images"/>
<img id="menu_image" class="preview_img" />
<input type="submit" value="Submit" />
</div>

在更改事件中,我们首先检查图像的大小。在第二个 if条件中,我们检查它是否是一个图像文件。

如果不是图像文件,则 this.files[0].type.indexOf("image")-1

document.getElementById("menu_images").onchange = function () {
var reader = new FileReader();
if(this.files[0].size>528385){
alert("Image Size should not be greater than 500Kb");
$("#menu_image").attr("src","blank");
$("#menu_image").hide();
$('#menu_images').wrap('<form>').closest('form').get(0).reset();
$('#menu_images').unwrap();
return false;
}
if(this.files[0].type.indexOf("image")==-1){
alert("Invalid Type");
$("#menu_image").attr("src","blank");
$("#menu_image").hide();
$('#menu_images').wrap('<form>').closest('form').get(0).reset();
$('#menu_images').unwrap();
return false;
}
reader.onload = function (e) {
// get loaded data and render thumbnail.
document.getElementById("menu_image").src = e.target.result;
$("#menu_image").show();
};


// read the image file as a data URL.
reader.readAsDataURL(this.files[0]);
};
<script>


function chng()
{
var typ=document.getElementById("fiile").value;
var res = typ.match(".jp");


if(res)
{
alert("sucess");
}
else
{
alert("Sorry only jpeg images are accepted");
document.getElementById("fiile").value="; //clear the uploaded file
}
}


</script>

现在在 html 部分

<input type="file" onchange="chng()">

这段代码将检查上传的文件是否是 jpg 文件,并限制其他类型的上传

这就是我一直以来成功使用的方法:

...
<div class="custom-file">
<input type="file" class="custom-file-input image-gallery" id="image-gallery" name="image-gallery[]" multiple accept="image/*">
<label class="custom-file-label" for="image-gallery">Upload Image(s)</label>
</div>
...

检查服务器端的实际文件类型总是一个好主意。

因为 <input type="file" id="fileId" accept="image/*">不能保证有人会选择一张图片,所以你需要这样的验证:

if(!(document.getElementById("fileId").files[0].type.match(/image.*/))){
alert('You can\'t upload this type of file.');
return;
}