Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   input type="file" (https://javascript.ru/forum/misc/28640-input-type%3D-file.html)

Джэксон 27.05.2012 21:17

input type="file"
 
Здравствуйте уважаемые форумчане! Назрела одна проблема с input type="file". Меня интересует как сделать так, чтобы в input можно было добавить только картинку, а другие типы файлов не добавлялись, но при этом вылезал alert с сообщением о том, что юзер не тот файл выбрал. Помогите пожалуйста это реализовать.:)

devote 27.05.2012 22:19

<input id="file_browse" type="file" name="myfile" />
<script>
    document.getElementById( 'file_browse' ).onchange = function() {

        if ( this.value && !/\.(jpg|jpeg|bmp|gif|png)$/i.test( this.value ) ) {

            alert( "Вы выбрали не тот файл: " + this.value.replace( /\\/g, "/" ).split( '/' ).pop() );

        } else if ( this.value ) {

            alert( "Все ок!" );
        }
    }
</script>

Джэксон 27.05.2012 22:29

о спасибо большое:) я тут пока сидел думал тоже кое что сообразил.
<input type="file" id="getFile" onchange="poovImg();" name="imagesInp"/>
<script type="text/javascript">
function poovImg() {imageInput=document.getElementById('getFile').value;
if (/[.][jpg,png,gif,JPG,GIF,PNG][^exe,EXE]/.test(imageInput)) {alert('Ok');
}
else { alert('Можно загрузить картинки только в формате *.jpg, *.gif, *.png');
}
}
</script>

Джэксон 27.05.2012 22:32

Можете подсказать, подойдёт такой вариант или нет?

Aetae 27.05.2012 22:36

Сразу видно что в статью по регуляркам вы даже не заглядывали, использовали исключительно подход шамана.

alert([
/[.][jpg,png,gif,JPG,GIF,PNG]/.test( 'aaa.jng' ),
/[.][jpg,png,gif,JPG,GIF,PNG]/.test( 'aaa.ggg' ),
/[.][jpg,png,gif,JPG,GIF,PNG]/.test( 'aaa.ggg.xxx' ),
/[.][jpg,png,gif,JPG,GIF,PNG]/.test( ',,.,,.,,' )
]).join('\n')

FINoM 28.05.2012 15:22

http://wufoo.com/html5/attributes/07-accept.html — может это поможет. Для старых браузеров, конечно, придется писать костыль. Хотя, возможно, есть решение на флеше.

Джэксон 28.05.2012 17:20

Цитата:

Сообщение от Aetae
Сразу видно что в статью по регуляркам вы даже не заглядывали, использовали исключительно подход шамана.

ну да :) но как вы считаете такой код имеет право на существование?

Джэксон 05.06.2012 10:13

нет, к сожалению accept="image/*" не подходит :( Уже пробовал

lord2kim 05.06.2012 11:57

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 179073)
Мне одному кажется дибилизмом давать людям возможность совершить ошибку и потом упрекать их в этом алертом за место того чтобы НЕ ДАТЬ возможность совршить ошибку и сделать так чтобы при обзоре файлов были видны только картинки указав это в специальном атрибуте тега input?

<input type="file" name="img" accept="image/*">

это не будет работать в IE9<

Deff 05.06.2012 12:04

А так ?
<script type="text/javascript">
<!--
function process_form(the_form)
{
	var element_names = new Object()
		element_names["req_file"] = "Файл"

	imageType=document.getElementById('fld1').value.replace(/^\s*.*(\.[^\.\s]*)\s*$/img,'$1');
	imageType=imageType.search(/[\.](?!exe|EXE)(?:jpg|png|gif|JPG|GIF|PNG)$/mg);
	if (imageType!=0) {
		alert('Неверный тип файла,\n Допустимые типы: jpg,png,gif')
		return false;
	}
	if (document.all || document.getElementById)
	{
		for (i = 0; i < the_form.length; ++i)
		{
			var elem = the_form.elements[i]
			if (elem.name && elem.name.substring(0, 4) == "req_")
			{
				if (elem.type && (elem.type=="text" || elem.type=="textarea" || elem.type=="password" || elem.type=="file") && elem.value=='')
				{
					alert("\"" + element_names[elem.name] + "\" это поле обязательно для заполнения в этой форме.")
					elem.focus()
					return false
				}
			}
		}
	}

} // -->
</script>

		<form id="upload_IMG" class="container" method="post" enctype="multipart/form-data" action="/profile.php?action=upload_avatar2&amp;" onsubmit="return process_form(this)">
			<fieldset>
				<legend><span>Укажите файл с изображением для загрузки</span></legend>
				<div class="fs-box">
				<input type="hidden" name="form_sent" value="1" />
				<input type="hidden" name="MAX_FILE_SIZE" value="30480" />
				<p class="fldfile required">
					<label for="fld1">Файл<em>(Обязательно)</em></label><br />
					<span class="input"><input id="fld1" name="req_file" type="file" size="40" /></span>
				</p>
				<p class="infofield">Изображение не может быть больше чем 30480 байт (30 KB).</p>
				</div>
			</fieldset>
			<p class="formsubmit"><input type="submit" class="button" name="upload" value="Загрузить" /></p>
		</form>

FINoM 05.06.2012 14:26

Цитата:

Сообщение от lord2kim
это не будет работать в IE9<

Ну для них алерт поставить. В чем проблема?

lord2kim 05.06.2012 16:27

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 179117)
так ie9 же вышел ишаки ниже не актуальные, зачем их поддерживать?

ну как бы он не робит в XP...

Цитата:

Сообщение от FINoM (Сообщение 179132)
Ну для них алерт поставить. В чем проблема?

не спорю...ток "ЗА")

ИМХО проще загнать все требуемые расширения в массив или объект и проверять последний элемент массива, полученный путем разбивки строки по символу "."

Deff 05.06.2012 18:21

lord2kim,
:) А чем пост 11 не устроил ?

lord2kim 05.06.2012 19:27

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 179181)
Но вышла семерка же и восьмерка. ХР устарела.

многие продолжают сидеть на XP...не все влились в 7-ку, а уж тем более и в 8-ку...

Цитата:

Сообщение от Deff (Сообщение 179188)
lord2kim,
:) А чем пост 11 не устроил ?

про пост 11 слово не сказал :) решение cool) но как-то ИМХО через проверку в массиве/объекте проще

Deff 05.06.2012 19:31

Imхо не намного - всё остальное типовые проверки формы перед отправкой

imageType=imageType.search(/[\.](?!exe|EXE)(?:jpg|png|gif|JPG|GIF|PNG)$/mg)

devote 05.06.2012 19:38

Цитата:

Сообщение от Maxmaxmахimus
то я не буду доплачивать за них сотрудникам за верстку под устаревшее ПО.

ого, вот так новость. У тебя есть свои сотрудники?

lord2kim 05.06.2012 19:44

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 179214)
Мне кажется раз такие люди сидят на устаревшем ПО то и будут получать в следствии этого устаревший функционал. Ну это моя политика. Раз не могут доплатить за семерку, то я не буду доплачивать за них сотрудникам за верстку под устаревшее ПО.

согласен с тем, что многие (не имеется в виду большинство) уже не реализуют функционал для устаревшего ПО...
но большинство сидит на не лицензионном ПО...хотя и не составляет особого труда скачать и установить новую версию системы, но у людей просто времени не хватает...(не говорю о тех кому в лом)
кто-то вообще сидит из офиса...в соответствии скорее всего у них установлен XP с SP1 каким-нибудь, где вообще IE 6...

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 179117)
так ie9 же вышел ишаки ниже не актуальные, зачем их поддерживать?

кст в IE 9 тоже тот атрибут не робит...

Deff 05.06.2012 19:45

Maxmaxmахimus,
Есть серезная доля пенсионеров, или близко к этому -это более 1/4 населения, ну внуки наверно не интересуют(до 14лет), но это еще 1/3
Если сайт профессионально жестко ориентирован - то можно не считаться,
Если оч молодежный или общевозрастной то без учета категорий со значительно устаревшими средствами коммуникации, - рейтинг ресурса падает

Джэксон 05.06.2012 19:53

Плюс это легко отключить. (я про accept="image/*")

Джэксон 05.06.2012 19:56

Мне кажется нам надо всем написать одну функцию для проверки на изображение. Это поможет и другим пользователям избежать этой проблемы:)

Deff 05.06.2012 19:57

Джэксон,
Хм -пошел открывать . спойл

Deff 05.06.2012 21:49

Maxmaxmахimus,
У меня есть форумы - где люди за 40, и они три пять лет сидят на ИЕ и штопают вяжут, и их "небольшая библиотека закладок" на интересующие ресурсы весит по 20-30мегов, заставить кого то сменить браузер(да они порой имеют два три, но сидят под Ие, ну будут изредка заходит с иных...
Моё Имхо -Проблема решится только временем.

lord2kim 05.06.2012 21:49

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 179250)
Если захотят с устаревшего браузера, то просто сообщите им об этом, ОНИ Ж НЕ ЗНАЮТ, пусть скачают хром. Так все нормальные люди делают.

портить никаму настроение не хо...и спорить особо...но не удержалса...я не пользователь Google Chrome...я не нормальный?) :)

melky 05.06.2012 21:50

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 179250)
Если захотят с устаревшего браузера, то просто сообщите им об этом, ОНИ Ж НЕ ЗНАЮТ, пусть скачают хром. Так все нормальные люди делают.

Сообщите... сообщите "где"? на развалинах сайта, где ничего не работает?

devote 05.06.2012 21:51

Цитата:

Сообщение от lord2kim
я не пользователь Google Chrome...я не нормальный?)

Ну да, по его логике видимо я тоже ненормальный.

Deff 05.06.2012 21:53

Пять лет - умрут сегодняшние ИЕ, но ежли мелкософт скорость обновлений не ускорит, и будет лидировать в продаже ОS - просто очередной ослиный виток

melky 05.06.2012 22:29

Цитата:

Сообщение от Deff (Сообщение 179259)
Пять лет - умрут сегодняшние ИЕ, но ежли мелкософт скорость обновлений не ускорит, и будет лидировать в продаже ОS - просто очередной ослиный виток

IE 10 мне напорядок больше нравится, нежели все существующие браузеры. не внешним видом, разумеется.
Ослиные витки сравнимы с версиями файрфокса\хрома\оперы.
Проблема не в нём, а в людишках, которые его не обновляют. вот и всё.



А отзываться плохо можно о любом браузере.

Deff 05.06.2012 22:36

melky,
Ие 9-10 - были сделаны под 7-8 , если следущий будет под 9ку
(а 7-8 делались минимум 3 года ) - за это время остальные браузеры обновятся раз по 7
Тут никто не хаит новые браузы, хают отстающие от общего русла

Если б Ие было хотя б версий раза в три более, то на ИЕ 6-7 наверняка сидел бы максимум процент,
А так и брауз более новый отдельно(я беру типовой случай) не поставшь и обновляется вместе с Виндой

melky 05.06.2012 23:34

Цитата:

Сообщение от Deff
(а 7-8 делались минимум 3 года ) - за это время остальные браузеры обновятся раз по 7
Тут никто не хаит новые браузы, хают отстающие от общего русла

Но-но. Вспомните, как он положил всех на лопатки (в пятой, или в шестой версии).
Сейчас это делает Chrome.

Насчёт обновления - это да, они странно поступили с IE, обрезав обновление оного до девятой версии в Win XP. (именно с IE, а не с пользователями).

Цитата:

Сообщение от Deff
Если б Ие было хотя б версий раза в три более, то на ИЕ 6-7 наверняка сидел бы максимум процент,
А так и брауз более новый отдельно(я беру типовой случай) не поставшь и обновляется вместе с Виндой

Я до сих пор не пойму, зачем они так распыляются. Забили бы на него уже давно.. или у них ещё есть коварный план?

Если у пропиаренной восьмёрки получится заставить обновиться людей, сидящих на XP (и 7), это было бы замечательно.

... а некоторых и вовсе пересесть на GNU/Linux... там проблем с обновлениями вообще нет.

Только представьте: у всех разные браузеры, но они поддерживают одинаково один стандарт... люди какают в горшки из золота, и каждые 10 лет меняют дома по жребию.

Ну почему мы не живём в утопии ? :(

Deff 05.06.2012 23:43

melky,
Основная проблема - привычка и сложности переноса - вот когда все прог. обеспечение будет в облачных хранилищах.
Возможно тогда переходы на новую Ось будут проще - я вылизывал ОСЬ года три, чтоб она грузилась семь секунд, и удалял избыточные службы, (надо еще ж и совместимое прог обеспечение искать) С виртуалкой - там вообще куча наворотов,(я имею ввиду установить согласовать - дабы и юзать комфортно и ресурсы не отжирала

Сейчас переустановка с востановлением всех настроек, если не из бекапа займет у меня дня три, это пользуясь шпаргалкой,
Если ставить новую ось, - Полгода притирки и маты - (то забыл -это не перенес, и попутно отвлечение %20-30 от текущих забот


Часовой пояс GMT +3, время: 23:20.