Естественно, используется не только JS, но заодно, что бы освободить php от мусорных и просто ошибочных загрузок и обработок файлов, решил переложить на клиента.
Вопрос вот только в том, на сколько легко обойти подобную защиту? (размер файла и его расширение проверяется)
но можно просто отключить js или исправить разметку и убрать из нее необходимые атрибуты..
В общем, есть вообще смысл, заморачиваться?
проверку уже написал, но не встраивал
Что имеется в виду под защитой?
В любом случае проверку на сервере делать нужно обязательно.
на сервере конечно все проверяется.
JS проверяет во время выбора файла, допустимое ли расширение для этого поля, у выбранного файла, не привышает ли размер файла указанный лимит, если что то не сходится, то очищает поле выбора файла
function selectFile(input){
var getName = $(input).val();
var viewName = $(input).next('span.vf');
var filepatch = getName.split('\\');
var fileName = filepatch[filepatch.length - 1];
if($(input).attr('accepted')!=undefined && $(input).attr('accepted')!=''){
var EXT = fileName.split('.');
var FileEXT = EXT[EXT.length-1].replace('jpeg', 'jpg');
var Accepted = $(input).attr('accepted').replace(' ', '');
var AcceptedEXT = Accepted.split(',');
var ValidEXT = false;
for(s=0; s < AcceptedEXT.length; s++){
if(AcceptedEXT[s].replace('jpeg', 'jpg')==FileEXT){
ValidEXT = true;
}
}
}else{
var ValidEXT = true;
}
if(ValidEXT==true){
if(input.files[0].size!=undefined && input.files[0].size!='' && input.files[0].size > 0){
var FileSize = input.files[0].size;
if($(input).attr('max-size')!=undefined && $(input).attr('max-size')!=''){
var Size = $(input).attr('max-size').split(' ');
if(Size[0]==parseInt(Size[0])){
if(Size[1]=='Gb'){
var LimitSize = (1024 * 1024 * 1024) * parseInt(Size[0]);
}else if(Size[1]=='Mb'){
var LimitSize = (1024 * 1024) * parseInt(Size[0]);
}else if(Size[1]=='Kb'){
var LimitSize = 1024 * parseInt(Size[0]);
}else{
var LimitSize = parseInt(Size[0]);
}
if(FileSize <= LimitSize){
var ValidSIZE = true;
}
}else{
var ValidSIZE = true;
}
}else{
var ValidSIZE = true;
}
if(FileSize > (1024 * 1024)){
var StringSize = (FileSize / (1024 * 1024)).toFixed(2)+'Mb';
}else if(FileSize > 1024){
var StringSize = (FileSize / 1024).toFixed(1)+'Kb';
}else{
var StringSize = FileSize+'b';
}
var ViewFileSize = '<span class="upload-v-f-s">'+StringSize+'</span>';
}else{
var ViewFileSize = '';
var ValidSIZE = true;
}
if(ValidSIZE==true){
viewName.html(ViewFileSize+fileName);
}else{
$(input).val('');
viewName.html('');
alert('Недопустимый размер файла!');
}
}else{
$(input).val('');
viewName.html('');
alert('Недопустимый тип файла!');
}
}
и выбор файла типа
<input class="screen" accepted="gif, jpg, png" max-size="50 Kb" type="file" name="screen" placeholder="Обложка" onchange="selectFile(this)" />
Как защита -- бессмысленно. Как фича, которая поможет сэкономить время и повысить юзабельность -- очень даже полезно. На мой взгляд все очевидно.
Как защита - не имеет. Как средство уведомить юзера о том, что он делает что-то не так, до того как он отправит фалик в пару сотен МБ на сервер - имеет.
на счет юзабильности я как то не подумал))
а с регистрацией точно так же ? можно ли побобрать как то парольчем то если рега на стороне клиента ?
ramzes, ну некоторые реги мона вскруть говорят брутом...а как регой на стороне клиента втаком случае..?