РазделыСтатьиОбновления ReloadCMS → Загрузка в статью картинок с помощью AJAX

Вставка картинок на сайт без перезагрузки страницы
Задача написания Аяксового загрузчика встало передо мной неожиданно - получил заказ на сайт со множеством картинок в статьях.
Вместо тупой механической работы решил облегчить жизнь себе и людям - написать загрузчик картинок в статью.

Решение начинается с постановки задачи.
Что есть на сегодняшний день?
Сейчас в ReloadCMS 1.2.7 картинки на сайт грузятся с помощью ссылки "Загрузка файлов" в админке.

JPG

Решение от Greenray в 1.2.8 - 1.3beta, который первым в ReloadCMS-сообществе реализовал фичу загрузки в статью и комментарии, очень хорошо, но не подошло мне по следующим причинам:

1. При добавлении картинки страница перезагружается целиком.
А значит статью где-то промежуточно нужно сохранять. Если сервер окажется в этот момент недоступен, статья пропадёт целиком.
AJAX использовать сложнее, но зато результат - более приемлем:
- На сервер меньше нагрузка (для файлового движка - важно!);
- Меньше траффик;
- Весь текст статьи хранится у пользователя, и если у него пропало электричество - сам виноват, мы ни при чём (шутка).
2. Разрешение загрузки картинок в комментарии к статьям является, по-моему, ошибкой. Если это разрешать, то только для Редактора статей или админа.
3. Вынесение загруженных файлов из единой папки uploads - тоже, по- моему, ошибка. В 1.2.9 загруженные в статью файлы хранятся в папке статей, и могут быть стёрты при удалении статьи. Или у неё изменится адрес при переносе статьи между категориями. Например, я люблю публиковать статью не сразу, а сохранять в черновиках и дорабатывать со временем. При переносе статьи меняется и адрес картинок.
А если на картинку поставили ссылку? А если она применяется в нескольких статьях? А как исключить сжатие картинок, особенно больших, при архивации данных (у меня папка uploads исключена из архивации)? Больше вопросов, чем ответов.

Поэтому я решил оставить это как есть, в будущем году при переработке движка добавив сортировку загруженных файлов - по алфавиту, размеру и по времени закачки. Возможно добавление времени создания в линукс-формате в начало файла. Пока не решил, буду решать в марте 2011г.

4. Ну и самый главный аргумент: загрузка средствами AJAX - это круто, модно и кошерно.

Поэтому отметаем всё и делаем с нуля.

Что нам надо получить в итоге?

Опишем порядок работы идеального загрузчика:
1. Заходим в админку, жмём "Публикация статьи".
2. Пишем статью, время от времени подгружая картинки в нужные места.
3. Если адрес хоста, загружающего картинку, не совпадает с вашим - стереть бяку и вывести ошибку (привет хакерам!).
4. Проверка картинок, по расширениям (jpg,png,gif). Jpeg - расширение отметаю как устаревшее, потому как за 2 последних года не встречал.
Если загруженное - не картинка, вывести ошибку и стереть загруженную гадость.
//upd - картинки можно ещё проверять по внутреннему содержанию средствами PHP, а не только по расширениям - добавим позже и эту защиту!
5. Ссылка на картинку должна вставляться в поле ввода текста, в конец его.
6. Если название файла на русском (а бывают и такие товарищи), переводить в латиницу.
7. Если файл большой и долго загружается - показать процесс загрузки.

Собственно, всё кроме п.7 и реализовано в модуле загрузки картинок.

Поэтому он, конечно, не идеален. Но вполне работоспособен.
Ссылка на скачку.
Установка на сервер - распаковать и залить по ФТП.
Пока замеченный баг - ошибки загрузки картинок пишутся прямо в текст статьи. Точнее это не баг, а просто я не придумал куда их писать-то ещё?
//upd Ещё хорошее решение я видел здесь.
Там вообще чел грузит файлы пачками, с использованием jQuery
Но он (пока) нам не подходит, т.к. некорректно работает с русскими однобайтными кодировками.
09.10.2010 13:17 Автор/источник: Den1xxx

Комментировать

Вы не залогинены! Регистрация

Комментарии

admin
denis
19:55:31 13 Октябрь 2010
Цитата:
Простите за многословия - все мои замечания это вовсе не критика
Да всё нормально, идёт рабочее обсуждение. И в критике не вижу ничего плохого - правильная критика помогает двигаться вперёд.
Конечно нужно добавить настройки архивации http://from...p;pid=30#30
Гость
No avatar
16:22:54 13 Октябрь 2010
Я понял что в этом дело.

К слову - в глючном и неудобном битриксе(вообще позор для платной системы) архивация предусмотрена автоматом в несколько частей, специально на ограниченное время исполнения скрипта.

Сейчас мне проще бекапить ВСЕ СРАЗУ весь сайт через админку хостинга, ибо картинки картинками, тексты текстами, но статья с иллюстрациями все-таки один цельный элемент по смыслу.

Простите за многословия - все мои замечания это вовсе не критика, а всего лишь простой отчет beta-тестера, ну может чуть-чуть пожеланий на будущее thank_you
admin
denis
14:02:22 13 Октябрь 2010
Цитата:
возвращения uploads в back-up
Это не планируется. Подправить возвращение uploads в back-up можете вручную, но сначала почитайте эту тему http://relo...5&pid=8
Когда делается архивация множества файлов, PHP может превысить разрешаемое время для исполнения, и сервер прервёт скрипт. По-умолчанию exec_time равно всего 30 сек.
За это время на старых сайтах с большим количеством информации не удаётся упаковать ещё и закачанные файлы. Поэтому uploads перенесён из папки contents, где он был первоначально, в корень. Как раз чтобы не сжимать его при бэкапе. При этом картинки галереи не исключены из архивации.

Back-up нужен на сайте, чтобы сохранять текстовый контент - его трудно, а подчас и невозможно восстановить. А картинки можно перезалить по-новой. Папка для хранения его всегда известна
winking
Текстовые файлы могут \"биться\" при большой нагрузке, т.к. в них идёт запись. А в картинки никто не пишет, поэтому бэкапить их незачем.
Гость
No avatar
12:23:00 13 Октябрь 2010
Вполне логично. Убедили. Будем ждать марта с надежной возвращения uploads в back-up ;)

jpg
admin
denis
08:41:12 11 Октябрь 2010
Цитата:
в крайнем случае выделить в контенте отдельную папку, в любом случае про своевременное удаление ненужных изображений пусть юзер сам не забывает.
Я против того чтоб \"юзер сам не забывал\".
1. Из папки uploads можно подхватывать загруженные файлы и повторно вставлять их в статью. При публикации статьи есть выбор \"Добавить ссылку на файл\".
2. Их можно просматривать и удалять из админки, кликнув \"Загрузка файлов\".
3. Можете сделать \"свой собственный лунапарк - с блэкджеком и шлюхами\", но о совместимости с последующими версиями придётся забыть.

Устал читать? Напиши! Или позвони +375 29 5344286. На связи по будним дням с 800 до 1700.