提问人:kbvishnu 提问时间:9/30/2010 最后编辑:shA.tkbvishnu 更新时间:9/29/2023 访问量:1038915
如何允许<input type=“file”>只接受图像文件?
How to allow <input type="file"> to accept only image files?
问:
我只需要通过标签上传图像文件。<input type="file">
目前,它接受所有文件类型。但是,我想将其限制为仅特定的图像文件扩展名,包括 、 等。.jpg
.gif
如何实现此功能?
答:
使用输入标记的 accept 属性。要仅接受 PNG、JPEG 和 GIF,您可以使用以下代码:
<label>Your Image File
<input type="file" name="myImage" accept="image/png, image/gif, image/jpeg" />
</label>
或者简单地说:
<label>Your Image File
<input type="file" name="myImage" accept="image/*" />
</label>
请注意,这仅向浏览器提供提示,告知要向用户显示哪些文件类型,但这很容易规避,因此您还应该始终在服务器上验证上传的文件。
它应该可以在 IE 10+、Chrome、Firefox、Safari 6+、Opera 15+ 中使用,但在移动设备上的支持非常粗略(截至 2015 年),根据一些报告,这实际上可能会阻止某些移动浏览器上传任何内容,因此请务必测试好您的目标平台。
有关详细的浏览器支持,请参阅 http://caniuse.com/#feat=input-file-accept
评论
accept="file/csv, file/xls"
image/x-png
image/png
使用这个:
<input type="file" accept="image/*">
适用于 FF 和 Chrome。
评论
像这样使用它
<input type="file" accept=".png, .jpg, .jpeg" />
它对我有用
https://jsfiddle.net/ermagrawal/5u4ftp3k/
评论
accept="image/png, image/gif, image/jpeg"
您可以使用属性来阅读此文档 http://www.w3schools.com/tags/att_input_accept.aspaccept
<input type="file">
这可以通过以下方式实现
<input type="file" accept="image/*" />
但这不是一个好方法。您必须在服务器端编码以检查文件是否为图像。
检查图像文件是真实图像还是假图像
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
}
else {
echo "File is not an image.";
$uploadOk = 0;
}
}
有关更多参考,请参阅此处
http://www.w3schools.com/tags/att_input_accept.asp http://www.w3schools.com/php/php_file_upload.asp
步骤:
1. 将 accept 属性添加到输入标签
2.使用 javascript
3 进行验证。添加服务器端验证以验证内容是否确实是预期的文件类型
对于 HTML 和 javascript:
<html>
<body>
<input name="image" type="file" id="fileName" accept=".jpg,.jpeg,.png" onchange="validateFileType()"/>
<script type="text/javascript">
function validateFileType(){
var fileName = document.getElementById("fileName").value;
var idxDot = fileName.lastIndexOf(".") + 1;
var extFile = fileName.substr(idxDot, fileName.length).toLowerCase();
if (extFile=="jpg" || extFile=="jpeg" || extFile=="png"){
//TO DO
}else{
alert("Only jpg/jpeg and png files are allowed!");
}
}
</script>
</body>
</html>
解释:
- accept 属性筛选将显示在 文件选择器弹出窗口。但是,这不是验证。它只是一个 对浏览器的提示。用户仍然可以更改 弹出。
- javascript 仅验证文件扩展名,但不能 真正验证选择文件是实际的JPG还是PNG。
- 因此,您必须在服务器端编写文件内容验证。
评论
document.getElementById("fileName").value = "";
使用 type=“file” 和 accept=“image/*”(或所需的格式),允许用户选择具有特定格式的文件。但是您必须在客户端再次重新检查它,因为用户可以选择其他类型的文件。 这对我有用。
<input #imageInput accept="image/*" (change)="processFile(imageInput)" name="upload-photo" type="file" id="upload-photo" />
然后,在你的 javascript 脚本中
processFile(imageInput) {
if (imageInput.files[0]) {
const file: File = imageInput.files[0];
var pattern = /image-*/;
if (!file.type.match(pattern)) {
alert('Invalid format');
return;
}
// here you can do whatever you want with your image. Now you are sure that it is an image
}
}
评论
const file: File = imageInput.files[0];
var pattern = /image\/\w*/;
如果要一次上传多张图片,可以在输入中添加属性。multiple
upload multiple files: <input type="file" multiple accept='image/*'>
简单而强大的方式(动态接受)
将格式放在数组中,例如“image/*”
var upload=document.getElementById("upload");
var array=["video/mp4","image/png"];
upload.accept=array;
upload.addEventListener("change",()=>{
console.log(upload.value)
})
<input type="file" id="upload" >
您可以添加特定类型的图像或其他文件类型,并在代码中进行验证:
function handleFileInput(e) {
const [ file ] = e.target.files
if (!file) return
const { size, type } = file
if (size > 2097152) {
throw "too big"
} else if (
type !== "application/pdf" && type !== "application/wps-office.pdf" &&
type !== "image/jpg" && type !== "image/jpeg" && type !== "image/png"
) {
throw "not the right type"
} else {
console.log("file valid")
}
}
<input type="file" accept="image/x-png,image/jpeg,application/pdf" onchange="handleFileInput(event)" />
在html中;
<input type="file" accept="image/*">
这将接受所有图像格式,但不接受其他文件,如 pdf 或视频。
但是如果你使用的是 django,在 django forms.py;
image_field = forms.ImageField(Here_are_the_parameters)
评论
其他人的答案为 ReactJS 重构(钩子)
import React from 'react';
const ImageUploader = () => {
const handleImageUpload = (e) => {
// If no file selected, return
if (e.target.files.length === 0) return false;
const file = e.target.files[0];
// If no image selected, return
if (!/^image\//.test(file.type)) {
alert(`File ${file.name} is not an image.`);
return false;
}
// ...
};
return (
<>
<input type='file' accept='image/*' onChange={(e) => handleImageUpload(e)} />
</>
);
};
export default ImageUploader;
补充一下:如果您想包含所有具有最佳跨浏览器支持的现代图像文件类型,它应该是:
<input type="file" accept="image/apng, image/avif, image/gif, image/jpeg, image/png, image/svg+xml, image/webp">
这允许可以在大多数浏览器中显示的所有图像文件类型,同时排除不太常见的格式(如 TIFF)或不适合 Web 的格式(如 PSD)。
评论