Загрузка картинок с помощью jQuery и PHP
Многие интересуются как сделать загрузку картинок на сервер, без перезагрузки страницы и с предварительным просмотром загруженного изображения. Сегодня это совсем не сложно, все что вам понадобится, небольшие знания в PHP и стандартная библиотека jQuery Form.
Давайте приступим к написанию нашего загрузчика и разберем все по полочкам.
Для начала давайте создадим .html страницу и добавим в нее саму форму загрузки и конечно же подключим jQuery
Не забудьте скачать jQuery Form malsup.com/jquery/form/#tab7
Так же добавляем на страницу скрипт, который в свою очередь будет выводить на странице процесс загрузки и соответственно саму картинку.
ВНИМАНИЕ!!! Старая версия скрипта
jQuery в новых версиях не поддерживает функцию .live()ее альтернатива .on().
Новая функция jQuery с on()
Теперь нам нужно принять файл и обработать его должным образом, а так же переместить его в отведенную для файлов директорию на сервере. Для этого создаем файл upload.php со следующим содержимым
И так, теперь давайте рассмотрим написанный код, что и зачем он вобще нужен.
Начнем с
Тут мы определяем переменную UPLOAD_FILE и назначаем ей путь для загрузки файла. Думаю тут все просто и понятно
Далее
Прежде чем грузить файлы на сервер нам нужно будет проверить их расширение, ведь могут кроме изображений залить что то еще, например .php файл c шелом или еще что то.
если приняли пост запрос и он не пустой, тогда выполняем скрипт
Определяем переменные с название файлы и его размером
Проверяем, передали ли нам файл
Давайте приступим к написанию нашего загрузчика и разберем все по полочкам.
Для начала давайте создадим .html страницу и добавим в нее саму форму загрузки и конечно же подключим jQuery
<html>
<head>
<title>Загрузка файлов на сервер PHP и jQuery. Scriptland.com.ua</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="/js/jquery.form.js"></script>
</head>
<body>
<form id="formUpload" method="post" enctype="multipart/form-data" action="/upload.php">
<input type="file" name="file" id="file" />
<div id="preview"></div>
</form>
</body>
</html>
Не забудьте скачать jQuery Form malsup.com/jquery/form/#tab7
Так же добавляем на страницу скрипт, который в свою очередь будет выводить на странице процесс загрузки и соответственно саму картинку.
ВНИМАНИЕ!!! Старая версия скрипта
jQuery в новых версиях не поддерживает функцию .live()ее альтернатива .on().
<script type="text/javascript">
// Загружаем файл
$(document).ready(function() {
$('#file').live('change', function() {
$("#preview").html(''); // чистим preview
$("#preview").html('<img src="load.gif" alt="JavaScript: Загрузка картинок с помощью jQuery и PHP" />'); //показываем картинку загрузки
$("#formUpload").ajaxForm({
target: '#preview'
}).submit();
});
});
</script>
Новая функция jQuery с on()
<script type="text/javascript">
// Загружаем файл
$(document).ready(function() {
$(document).on('change', '#file', function() {
$("#preview").html(''); // чистим preview. Кстати я не знаю для чего его чистить, следующая строка его сама подчистит.
$("#preview").html('<img src="load.gif" alt="JavaScript: Загрузка картинок с помощью jQuery и PHP" />'); //показываем картинку загрузки
$("#formUpload").ajaxForm({
target: '#preview'
}).submit();
});
});
</script>
Теперь нам нужно принять файл и обработать его должным образом, а так же переместить его в отведенную для файлов директорию на сервере. Для этого создаем файл upload.php со следующим содержимым
<?php
define('UPLOAD_FILE', 'upload/images/');
$valid_formats = array("jpg", "png", "gif","jpeg"); // допустимые форматы
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") // пришел запрос
{
$name = $_FILES['file']['name'] ; // имя файла
$size = $_FILES['file']['size'] ; // размер файла
if(strlen($name))
{
list($txt, $ext) = explode(".", $name) ; // разбиваем на имя и формат
if(in_array($ext,$valid_formats)) // смотрим формат такой как мы разрешили?!
{
if($size < (1024 * 1024 * 1024)) // Ограничиваем размер файла в 1MB
{
$actual_image_name = time() . "." . $ext ; // задаем уникальное имя файлу
$tmp = $_FILES['file']['tmp_name'];
if(move_uploaded_file($tmp, UPLOAD_FILE . '/' . $actual_image_name)) // переносим файл с tmp в наш каталог
{
echo "<img src=\"" . UPLOAD_FILE . "/{$actual_image_name}\" class=\"preview\" alt="JavaScript: Загрузка картинок с помощью jQuery и PHP" /> "; // показываем превьюшку
User::UploadUserAvatar($UserId, $username, $actual_image_name) ;
}
else echo "Ошибка. =(";
}
else echo "Максимальный размер файла не должен превышать 1MB";
}
else echo "Допустимые форматы: jpg|jpeg|png|gif)";
}
else die("Пожалуйста выберите изображение!") ;
}
?>
И так, теперь давайте рассмотрим написанный код, что и зачем он вобще нужен.
Начнем с
define('UPLOAD_FILE', 'upload/images/');
Тут мы определяем переменную UPLOAD_FILE и назначаем ей путь для загрузки файла. Думаю тут все просто и понятно
Далее
$valid_formats = array("jpg", "png", "gif","jpeg");
Прежде чем грузить файлы на сервер нам нужно будет проверить их расширение, ведь могут кроме изображений залить что то еще, например .php файл c шелом или еще что то.
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
если приняли пост запрос и он не пустой, тогда выполняем скрипт
$name = $_FILES['file']['name'] ; // имя файла
$size = $_FILES['file']['size'] ; // размер файла
Определяем переменные с название файлы и его размером
if(strlen($name))
Проверяем, передали ли нам файл
20 комментариев
Я сейчас обычно мелкие проекты на своем коде пишу, а вот что то посолиднее, так на фрейм сажаю, да и безопаснее это, ну и позволяет избежать изобретение велосипеда. Тут конечно еще играет важную роль сам фреймворк, мне по душе, чем проще тем лучше, чем меньше файлов и кода, тем лучше, а то открыл тут как то yii, глянув внутрь и понял, что его то уже точно юзать не буду!
И дальше ничего. upload/img/ существует, jquery.form.js подключил
И еще на странице должен быть
и именно этой версии, а не новый, в новом jquery.min функция .live не работает, ее нужно на .on переделывать.
Скачай плагин jquery.form.min.js malsup.com/jquery/form/#download
Создали файл test.php
Закинули в него код php приведенный в примере выше.
Разместили HTML форму на странице приведенную выше, но в нее перед
добавили кнопку submit
При этом JS
НЕ подключаем.
Жмакаем по кнопку Отправить, если видим картинку, то код рабочий, если нет, выдаст ошибку или напишет что то, здесь в коде проверок больше исполняемого кода xD
Если картинка видна, но при подключении скрипта ее нет. Значит проблема в библиотеке, а точнее в том что новые версии jQuery не поддерживают .live(), нет там такой функции, вместо .live(), нужно использовать .on()
ПС. У себя проблем не наблюдал!
Да и в данном примере она ни к чему, так как при выборе картинки она сразу же загружается и после загрузки выводится в preview вместо load.gif