27.08.2013, 23:09
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Shitbox2, спасибо, за упоминание
Сообщение от Shitbox2
|
Может и правда, потом вынесу общие функции в отдельный сервис...
|
)))
Сообщение от Shitbox2
|
А с новой версией Ангуляра, вообще, не запускается
|
у меня вроде работает
Сообщение от Shitbox2
|
У тебя нельзя менять на лету настройки плагина
|
поясни
Сообщение от Shitbox2
|
было бы можно, создание клона поля в изолированной области видимости принесло бы проблем)
|
могу предположить только проблемы с "ловлей" файлов. Хотя они решаются, но лениво
Цитата:
|
Планы на будущее (с вашей помощью ;-)
Общий прогресс для одновременно загружаемых файлов.
Ограничение количества одновременно загружаемых фалов
Уменьшение картинки на клиенте
Отмена загрузки (xhr.abort() и т.п.).
Допиливание загрузчиков для старых браузеров.
|
- общий прогресс у меня реализован, можешь посмотреть (на локальном сервере, removeAfterUpload = false)
- про ограничение кол-ва загружаемых файлов - теоретически, можно (а можно и в модуль валидаторов добавить)
- уменьшение изображений и валидация - я бы вынес в отдельные сервисы, т.к. работа с изображениями более узкая задача, чем загрузка файлов
- аборты было бы неплохо добавить ...
- не вижу смысла заострять внимание на старых браузерах. Пусть умиратют
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 27.08.2013 в 23:12.
|
|
28.08.2013, 13:55
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
Т.е. поменять настройку в любой момент в приложении. Если использовать изолированную область видимости, то после первой же загрузки через iframe клон инпута будет ссылаться на пустой объект с настройками (т.к. новая область видимости ничего о нем не знает). В моем способе модуль постоянно вотчит изменение настройки и конечно же запишет вместо них undefined.
Цитата:
|
уменьшение изображений и валидация - я бы вынес в отдельные сервисы
|
Это да. С уменьшением тоже не просто. Пытался сделать через канвас, но мало чего толкового нашел... Плагин бы достать, одна часть которого уменьшает изображение, а другая (опционально) предоставляет интерфейс для обрезки.
Цитата:
|
не вижу смысла заострять внимание на старых браузерах. Пусть умиратют
|
Ну, с 8 ИЕ хотя бы с урезанным функционалом :-)
|
|
28.08.2013, 15:59
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от Shitbox2
|
Т.е. поменять настройку в любой момент в приложении. Если использовать изолированную область видимости, то после первой же загрузки через iframe клон инпута будет ссылаться на пустой объект с настройками (т.к. новая область видимости ничего о нем не знает). В моем способе модуль постоянно вотчит изменение настройки и конечно же запишет вместо них undefined.
|
понял. Как вариант обходить массив и менять "руками". Для себя я пока не вижу особой необходимости, поэтому делать пока не буду )
Актуально только если элементы очереди не удаляются после загрузки и не загружаются автоматически
Сообщение от Shitbox2
|
С уменьшением тоже не просто
|
я писал умешение и обрезку в виде лайт плагина для жуквери. Если нужна последняя версия, стучи в личку (лучше его переписать в виде
$( 'img' ).toCanvas( '[crop|resize]', { width: 300, height: 68 }) ) ...;
т.е. сделать работу с ним более прозрачной)
Сообщение от Shitbox2
|
Ну, с 8 ИЕ хотя бы с урезанным функционалом
|
ie must die
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 28.08.2013 в 16:03.
|
|
29.08.2013, 22:23
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от Shitbox2
|
Ну тут можно и без Джиквери)
|
я просто пример показал
Сообщение от Shitbox2
|
но нужно ковырять
|
все просто - завист от кол-ва передаваемых параметров:
- 2 - ресайз
- >2 - кроп (насколько помню)
Сообщение от Shitbox2
|
Каким принципом руководствуешься, когда проверяешь фазу? Просто всегда проверяешь или в случаях, когда появлялись ошибки при тестировании или по другим соображениям?
|
если код выполняется вне контекста фрейморка, фазу лучше проверять (по моим личным наблюдениям)
Сообщение от Shitbox2
|
P.P.S. Не очень понял как твой прогресс устроен. Т.е. просто берешь и делишь прогресс одного файла на количество файлов в очереди. Такая штука работает только если в один момент загружается один файл. На деле же при множественной загрузке загружаются сразу несколько файлов, поэтому прогресс каждого должен добавляться в общий
|
у меня может загружаться одновременно только один файл. Пока не вижу смысла загружать сразу несколько. Не вижу проблем добавлять прогресс каждого файла в общий. У меня так и есть применительно к одному файлу (при removeAfterUpload = false на локальном сервере).
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
30.08.2013, 03:13
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
Цитата:
|
если код выполняется вне контекста фрейморка, фазу лучше проверять (по моим личным наблюдениям)
|
А если в контексте, то apply, вообще, не нужен)). Я вот тоже четко не понимаю в каких ситуациях можно попасть в запущенный цикл. Как показывает практика такие ситуации очень редки... Но от чего они случаются — загадка.
Цитата:
|
у меня может загружаться одновременно только один файл.
|
О_о А как же многопоточность и все дела? Кстати, обновил плагин. Сделал общий индикатор. Правда, достаточно дубовым способом. Не будет работать, если задержка между уведомлениями прогресса окажется больше 2 с и браузер не будет слишком лажать. Надеюсь, это редкость.
|
|
31.08.2013, 15:12
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от Shitbox2
|
Кстати, обновил плагин
|
ты хоть ссылки прикладывай, а то пока найдешь Я тоже свой обновил: добавил поддержку множественных зон сброса и инпутов с различными настройками ( демо)
Сообщение от Shitbox2
|
А как же многопоточность и все дела?
|
канал то не резиновый ) Впрочем, если создать несколько экземпляров загрузчика, вероятно, будет многопоточность Если ты аргументируешь, зачем в данном случае многопоточность, я тебя выслушаю )
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
31.08.2013, 17:31
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
Цитата:
|
ты хоть ссылки прикладывай, а то пока найдешь
|
Исправлюсь ( гитхаб, демо, песочница) :-)
Цитата:
|
канал то не резиновый )
|
Ничего об этом не знаю. Перетащи в демке десяток файлов, увидишь, что штук 5 будут одновременно загружаться. Браузер по умолчанию параллелит процессы)
Цитата:
|
добавил поддержку множественных зон сброса и инпутов
|
Ааааа! Зачем всё это? Разве бывают ситуации, когда нужно несколько инпутов для одной модели?)) Кстати, в моем варианте нет на это ограничений... Там инпут и модель соединяются в контроллере и сколько инпутов со сколькими моделями соединить — выбор пользователя. Хотя зачем нужно несколько инпутов...
P.S. А не планируешь добавить сжатие изображений на клиенте (законченную версию, с формированием blob и сохранением на сервере в формате картинки), а я бы у тебя утащил)))
P.P.S. Из руководства
Цитата:
|
Trying to reenter a $digest or $apply while one of them is already in progress is typically a sign of programming error that needs to be fixed.
|
Разработчики считают, что ситуации, когда повторно запускается фаза выполнения говорят об ошибках в коде
Последний раз редактировалось Shitbox2, 01.09.2013 в 11:08.
|
|
01.09.2013, 19:06
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от Shitbox2
|
Ничего об этом не знаю. Перетащи в демке десяток файлов, увидишь, что штук 5 будут одновременно загружаться. Браузер по умолчанию параллелит процессы)
|
не до конца уверен на этот счет. Допустим, ты перетащил 10 файлов и для каждого из них отправил post запрос. Итого 10 постов у тебя. Все равно быстрее от этого они заливаться не будут (пропускная способность канала), в связи с чем, на мой взгляд, загружать их по одному более естественно. К тому же в подобной реализации возможно прервать загрузки последующих файлов, после того как ряд уже был загружен.
Сообщение от Shitbox2
|
Ааааа! Зачем всё это? Разве бывают ситуации, когда нужно несколько инпутов для одной модели?
|
Ну а как ты еще представляешь себе загрузку файлов по разным урлам в рамках одной очереди? https://github.com/nervgh/angular-file-upload/issues/1
Сообщение от Shitbox2
|
Кстати, в моем варианте нет на это ограничений... Там инпут и модель соединяются в контроллере и сколько инпутов со сколькими моделями соединить — выбор пользователя. Хотя зачем нужно несколько инпутов...
|
в моей теперь тоже нет ограничений (писал выше). Можешь привести пример кода?
Сообщение от Shitbox2
|
P.S. А не планируешь добавить сжатие изображений на клиенте (законченную версию, с формированием blob и сохранением на сервере в формате картинки), а я бы у тебя утащил)))
|
планирую, но немного позднее Насчет абортов ничего не выяснить не удалось?
Сообщение от Shitbox2
|
Разработчики считают, что ситуации, когда повторно запускается фаза выполнения говорят об ошибках в коде
|
интересная точка зрения. Случайно не видел, используется ли где-нибудь в angular.ui проверка фазы?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
02.09.2013, 17:18
|
Профессор
|
|
Регистрация: 04.10.2010
Сообщений: 571
|
|
Цитата:
|
не до конца уверен на этот счет. Допустим, ты перетащил 10 файлов...
|
А может быть и быстрее, нужно исследовать. Впрочем, тут с тобой больше согласен. Так лучше, да и разница в скорости по-любому не будет существенной.
Цитата:
|
Ну а как ты еще представляешь себе загрузку файлов по разным урлам в рамках одной очереди?
|
О_о Никогда бы не подумал что кому-нибудь будет нужно. Во-первых загрузка одного и того же файла по разным URL в пределах одного сервера — плохое решение. Нельзя такие поощрять. Тут нужно загрузить файл один раз и уже на сервере скопировать куда нужно.
Загрузка одного файла на разные сервера... ИМХО, очень специфичная задача. Может быть какая-то распространенная хитрая оптимизация?
Загрузка очереди по разным URL. Типа кидаешь 5 файлов в таблицу, и они записываются в каждую ячейку. Возможно, но мало кому надо.
Цитата:
|
Можешь привести пример кода?
|
Тут лучше смотреть песочницу. У меня каждой директиве
oi-file="options"
можно задать свой объект с настройками. В каждом таком объекте мы задаем колбек
change: function (file) {
file.$upload(url + data.id, $scope.items[i], data.settings);
}
Из него мы получаем массив файлов и функцию загрузки. Можем теперь хоть каждый файл по отдельном URL загрузить
Цитата:
|
Насчет абортов ничего не выяснить не удалось?
|
Пока только отрицательный опыт. Убить загрузку можно, вызвав xhr.abort(). xhr-объект можно записать в объект файла (в твоем случае в item). Поскольку этот объект можно загрузить в область видимости, то можно и аборт оттуда сделать и всё хорошо обрывается. Проблема в том, что при манипуляциях с моделью лезут ошибки именно из-за того, что в модели оказывается ссылка на xhr, а в xhr записана ссылка на модель (циклическая ссылка).
Вот тут как раз думаю сделать как у тебя (в одно время загружается один файл), тогда в xhr можно будет не загружать модель, т.к. и так будет ясно для какой модели загрузился файл.
Цитата:
|
Случайно не видел, используется ли где-нибудь в angular.ui проверка фазы?
|
Случайно нигде не видел, чтобы она использовалась))) Более того, в версии 1.2 и из своего кода смог эти проверки выкинуть. Стало и без них работать. (был баг, когда http-запросы копились и уходили не сразу, если цикл не запустить)
|
|
|
|