【发布时间】:2010-11-19 06:03:47
【问题描述】:
我有以下几点:
<input id="user_profile_pic" name="user[profile_pic]" type="file">
在服务器上我检查以确保它是图像,但我想先检查客户端。
如果选择的文件输入文件不是 gif、jpg、png 或 bmp,我如何使用 jQuery 提醒用户?
谢谢
【问题讨论】:
标签: jquery jquery-plugins
我有以下几点:
<input id="user_profile_pic" name="user[profile_pic]" type="file">
在服务器上我检查以确保它是图像,但我想先检查客户端。
如果选择的文件输入文件不是 gif、jpg、png 或 bmp,我如何使用 jQuery 提醒用户?
谢谢
【问题讨论】:
标签: jquery jquery-plugins
你想检查元素的值是什么,类似于:
$("#user_profile_pic").change(function() {
var val = $(this).val();
switch(val.substring(val.lastIndexOf('.') + 1).toLowerCase()){
case 'gif': case 'jpg': case 'png':
alert("an image");
break;
default:
$(this).val('');
// error message here
alert("not an image");
break;
}
});
编辑
根据注释更改代码 - 如果不是图像,现在删除所选文件的值。
【讨论】:
element.wrap('<form>').closest('form').get(0).reset(); element.unwrap();
这很简单,不需要任何 JavaScript 验证。 只要写这个,它就会只接受图像文件。
<input type="file" multiple accept='image/*'>
【讨论】:
你可以使用正则表达式:
var val = $("#user_profile_pic").val();
if (!val.match(/(?:gif|jpg|png|bmp)$/)) {
// inputted file path is not an image of one of the above types
alert("inputted file path is not an image!");
}
当然,您可以向正则表达式添加更多格式。有更复杂和更全面的方法可以完成此任务,但只要输入的图像文件路径以标准图像文件扩展名结尾,此方法就可以完成任务。
【讨论】:
var val1=..., var val2=... var val3 =... if (!val.match(/(?:gif|jpg|png|bmp)$/)) {
可能有浏览器允许您创建给定路径的<img/>,通过它您可以检查它是否是真实图像(如果不是,onerror-event 应该在图像上触发并且它将具有宽度/高度为 0)。
但由于这只适用于某些浏览器并且存在安全风险(在我看来),我不建议这样做,所以我的回答是:你无法验证那里的任何东西。
检查 Alex 建议的文件扩展名可能是一种选择,但文件扩展名并不能保证它是否是图像。但是,作为一个简单的预检查(不是验证),它可能很有用。
【讨论】:
我们如何检查用户选择了图像文件?
.png 扩展名的文本文件在这里传递input[type=file][accept=image/*]
它最初对用户隐藏non-image 文件。但是这个过滤器也可以通过扩展工作。用户仍然可以手动输入任何现有的文件名。我们可以检查结果的 MIME 类型dataUrl,它以data:mimetype;base64,... 开头。所以,我们需要image/* mimetype。
var file = $('#uploadfile');
file.on('change', function (e) {
var reader = new FileReader();
reader.onload = function() {
var data = reader.result;
if (data.match(/^data:image\//)) {
$('#thumbnail').attr('src', data);
} else {
console.error('Not an image');
}
};
reader.readAsDataURL(file.prop('files')[0]);
});
【讨论】:
data:application/pdf,例如
你可以这样试试
// Image upload validation
$(document).on('change', ':file',function () {
const file = this.files[0];
const fileType = file['type'];
const validImageTypes = ['image/jpeg', 'image/png'];
if (!validImageTypes.includes(fileType)) {
alert('Only JPEG and PNG file types are allowed');
this.value = '';
}
});
【讨论】: