Обычно на нашем сайте публикуются материалы, посвященные настройке серверных частей различных систем, однако это не значит, что мы полностью игнорируем «другую сторону» клиент-серверного взаимодействия.
Сегодня мы рассмотрим достаточно интересную задачу - упрощение загрузки графических файлов на удалённый сервер. Очертим задачу детальнее:
- есть блог, который позволяет использовать HTML-разметку в теле постов;
- есть веб-сервер с именем lj.example.org, на котором можно размещать картинки для последующего использования в блоге;
- есть scp-доступ на сервер, который можно использовать для загрузки файлов (настроена беспарольная авторизация по ключу);
- корнем хоста lj.example.org является директория /home/user/www/lj на сервере;
- нужно облегчить заливку картинок из файлового менеджера на компьютере блоггера в директорию на сервер.
Большинство современных файловых менеджеров имеет возможность создания дополнительных функций для обработки файлов через подключение внешних скриптов. Этим мы и воспользуемся.
Для примера мы будем рассматривать файловый менеджер Thunar состава из XFCE4 Desktop, однако приведённое решение можно адаптировать и для других файловых менеджеров, например Nautilus из состава GNOME или Doplhin.из состава KDE.
Мы напишем скрипт, который будет загружать картинку на сервер и показывать пользователю HTML-код для её вставки в блог. Скрипт будет написан на shell, а для создания интерфейса будет использован фреймворк Zenity, о котором мы уже писали ранее.
От слов переходим к делу. Сразу приведём готовый листинг скрипта, основные идеи вполне понятны по комментариям:
#!/bin/sh # Получаем имя файла FILENAME=$1 # Имя файла не указано if [ -z ${FILENAME} ]; then echo "Usage: $0 filename" exit fi # Если файл не существует if [ ! -f ${FILENAME} ]; then echo "File ${FILENAME} doesn't exists!" exit fi # Сервер, на который мы будем закачивать картинки REMOTE_SERVER="user@exampler.org" # Путь на удалённом сервере, куда мы будем закачивать картинки REMOTE_BASE_PATH="/home/user/www/lj/pics" # Базовый урл, относительно которого будут располагаться картинки REMOTE_HTTP_PATH="http://lj.example.org/pics" IMAGE_CODE="" ( echo "# Начинается загрузка..." echo "0" # Получаем информацию о дате # Год DATE_Y=`date +%Y` # Месяц DATE_M=`date +%m` # День DATE_D=`date +%d` # Формируем путь для загрузки файла PATH_TO_UPLOAD="${REMOTE_BASE_PATH}/${DATE_Y}/${DATE_Y}${DATE_M}${DATE_D}" echo "# Создаём директорию на сервере..." echo "20" # Создаём папку на удалённом сервере ssh ${REMOTE_SERVER} "mkdir -p ${PATH_TO_UPLOAD}" > /dev/null 2>&1 echo "# Закачиваем файл на сервер..." echo "40" # Заливаем файл на удалённый сервер scp ${FILENAME} "${REMOTE_SERVER}:${PATH_TO_UPLOAD}/" > /dev/null 2>&1 echo "# Получаем информацию о файле..." echo "60" # Получаем данные о размере файла. Утилита identify является частю пакета ImageMagic IMAGE_DATA=`identify ${FILENAME} | awk '{print $3;}'` IMAGE_WIDTH=`echo ${IMAGE_DATA} | cut -d 'x' -f1` IMAGE_HEIGHT=`echo ${IMAGE_DATA} | cut -d 'x' -f2` echo "# Формируем код для вставки в блог..." echo "80" # Формируем код для вставки этого изображения в ЖЖ IMAGE_CODE="<IMG src='${REMOTE_HTTP_PATH}/${DATE_Y}/${DATE_Y}${DATE_M}${DATE_D}/" IMAGE_CODE="${IMAGE_CODE}`basename ${FILENAME}`" IMAGE_CODE="${IMAGE_CODE}' width=${IMAGE_WIDTH} height=${IMAGE_HEIGHT} />" echo "# Завершено!" echo "100" # Имя временного файла TMPFILE="/tmp/upload_to_lj.txt" # Сохраняем код ссылки во временный файл echo ${IMAGE_CODE} > ${TMPFILE} # Показываем окно с результатами загрузки zenity --text-info --filename=${TMPFILE} --title="HTML for LJ" --editable ) | zenity --progress --title="Загрузка картинки на сервер" --text="Начинаем операцию..." --percentage=0 --auto-close
Этот скрипт нужно сохранить под именем ~/scripts/upload_to_lj.sh, после чего остаётся только подключить его к файловому менеджеру.
Для этого нужно запустить Thunar и выбрать в меню «Правка» пункт «Настроить особые действия...». В окне со списком действий нужно нажать кнопку «Добавить особое действие...» и в поле «команда» ввести: «/home/moose/scripts/upload_to_lj.sh %f». Остальные поля заполняйте по вкусу:)
Затем на вкладке «Условия появления» нужно снять все галочки и поставить только одну - напротив пункта «Изображения», после этого остаётся только сохранить действие и можно пользоваться.
Теперь для загрузки картинки на сервер достаточно выбрать в её контекстном меню пункт, который только что был создан, а для вставки её в блог - скопировать и вставить HTML-код, который будет показан почти сразу после выбора этого пункта.
На этом всё. Приятной работы!
Корректор: Регина Васильева (reggi86@mail.ru)
Ссылки по теме:
Anonymous 2010-01-29 08:44:20 (#)
молодцы