LINUX.ORG.RU

django ajax image upload


0

1

Добрый вечер! Работаю над проектом на django. Возникла потребность сделать предварительный просмотр картинок при аплоаде. У пользователя есть возможность на странице динамично добавлять неограниченое количество форм, а так же удалять их. В этих формах есть простые инпуты и инпут аплоада картинки. Нужно реализовать предварительный просмотр картинки. Сущности связаные с этими формами создаются только по окончанию работы при нажатии на кнопку «сейв». Как это лучше сделать? Какимим средствами пользоваться?

загружать картинку на сервер сразу после выбора файла, как в гмейле, например
статей и средств куча

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

Спасибо, trashymichael! Проблема в том, что если пользователь выбрал картинку, посмотрел - не понравилась. То он выбирает в этой же форме другую. Мне нужно удалять старую с сервака и заменять ее новой. Как я уже писал, пользователь может создавать и удалять формы, в которой есть такие картинки. То есть мне нужно еще и удалять картинки при удалении формы. А если он насоздает таких форм, зааплоадит картинки и закроет браузер? Что с этими картинками делать? А может я еще что-то не предусмотрел. Меня интересуют какие-то идеи или примеры как и чем это делается

masterQ
()
Ответ на: комментарий от stevejobs

Спасибо, stevejobs! Флеш я не рассматриваю. Заказчик категорично против.

masterQ
()
Ответ на: комментарий от masterQ

>А если он насоздает таких форм, зааплоадит картинки и закроет браузер? Что с этими картинками делать?

Тупой вариант - вешаешь js скрипт, постоянно посылающий некий id юзера, раз в 20 сек. Браузер закрылся - скрипт перестал слать, ждёшь по таймауту и удаляешь все картинки от этого id.

И какую-нибудь фигню по крону можно придумать заодно, для гарантии.

anonymous
()
Ответ на: комментарий от pi11

Cпасибо за советы. Решил сделать так. Создать темповую папку tempPreview, в которую будут заливаться аяксом только картинки для предварительного просмотра. На <input type='file'> на onChange будет поститься кртинка аяксом на сервак в папку tempPreview и сразу же отображаться. При окончании работы с формами пользователь нажимает «Save» и все данные вместе с картинками постятся на сервер. Темповая папка очищается. Так же она будет очищаться по крону на случай, если позователь просто закроет окно. Буду рад услышать критику.

masterQ
()
Ответ на: комментарий от masterQ

>При окончании работы с формами пользователь нажимает «Save» и все данные вместе с картинками постятся на сервер. Темповая папка очищается.

А если 2 пользователя одновременно будут заливать картинки? Первый отправил запрос - временная папка очистилась с файлами второго пользователя.

Скрипта по крону вполне достаточно. Удалять просто файлы которым больше 12 часов (ну или меньше если проблемы с местом на сервере).

pi11 ★★★★★
()

многие браузеры дают возможность практически моментально отобразить картинку из <input type=«file»> при помощи js: ie6 из-за глюка (input.value), а ff и chrome потому, что так задумано (input.files[0].getAsDataURL()) . достаточно присвоить значение в <img src=«»>, «зажатый» css'ом по размеру тубнейла.

после этого картинка отправляется ajax'ом на сервер (методом post), где специальная view генерит из неё тубнейл и возвращает его в ответе (со статусом 200 и подходящими заголовками Content-type и т.п.). на диск можно ничено не сохранять.

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

Lucky ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.