Я больше не прошу у вас денежку.

Просто почеши меня! =)
Главная :: Программирование (Php, С#, WPF)

Загрузить изображение на сервер через iframe без перезагрузки страницы (jq, php)

Картинка

В этой статье я опишу процесс загрузки изображения на сервер без обновления страницы средствами php (можно переделать под загрузку файлов с любым, нужным вам, расширением).

Для данного примера нам понадобится форма с полем для указания пути к файлу и кнопкой загрузки файла. Так же на странице будет располагаться тег для отображения загруженной картинки и сам iframe, через который, собственно, и будет происходить загрузка изображения без обновления страницы.

По началу я негативно относился к расположению на странице поля iframe, но это исключительно предубеждения и ничего плохого он нам не сделает, даже не помешает, т.к. будет скрыт.

Html:

<form method="post" enctype="multipart/form-data" action="work.php" target="imgframe">
   <input type="file" id="img_src" required="required" accept="image" name="img_src">
   <input type="submit" value="Загрузить" />
</form>
<img id="image" src="" />
<iframe style="visibility: hidden; display: none;" id="imgframe" name="imgframe">
</iframe>

JavaScript:

Чтобы после загрузки изображения отобразить его, воспользуемся небольшим JavaScript, который будет вызываться из iframe при получении ответа от сервера о том, что изображение загружено.

function work(obj) {
    $("#image").attr("src", obj);
}

Php:

Здесь я сделал свою небольшую проверку на соответствие расширения файла необходимому и преобразовал имя файла в md5 так же для минимальной защиты от загрузки файлов php скриптов под видом картинок.

<?php	// work.php
header("Content-Type:text/html;charset=UTF-8"); // Кодирока
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 	// Если POST запрос
    if ($_FILES['img_src']){			// Есть ли файл 		
		
	// Моя небольшая проверка и преобразование имени
	$up_dir = './img/';				 // Папка для загрузки
	$wl = array('.jpeg', '.jpg', '.png', '.gif');    // Белый список расширений
	$real_name = $_FILES['img_src']['name'];	 // Имя файла
	$ext = '.'.mb_strtolower(pathinfo($real_name, PATHINFO_EXTENSION)); // Расширение    
	$up_file = md5($real_name).$ext;	// Имя файла в md5 + его расширение
		
	if (in_array($ext, $wl)){	        // Если расширение есть в белом списке
	    if (move_uploaded_file($_FILES['img_src']['tmp_name'], $up_dir.$up_file)) {
		// Файл загружен, выполняем скрипт на странице
		echo '<script> window.top.work("'.$up_dir.$up_file.'"); </script>';
	    } else {
		/ Ошибка при загрузке
	    }
	} else {
	    // Не корректное расширение
	}
    }
}
?>
21
Поделиться:
8835 08.04.2013 г.
Яндекс.Метрика