Shitbox2, спасибо, за упоминание :)
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
- про ограничение кол-ва загружаемых файлов - теоретически, можно (а можно и в модуль валидаторов добавить) - уменьшение изображений и валидация - я бы вынес в отдельные сервисы, т.к. работа с изображениями более узкая задача, чем загрузка файлов - аборты было бы неплохо добавить ... - не вижу смысла заострять внимание на старых браузерах. Пусть умиратют :) |
Цитата:
Цитата:
Цитата:
|
Цитата:
Актуально только если элементы очереди не удаляются после загрузки и не загружаются автоматически Цитата:
$( 'img' ).toCanvas( '[crop|resize]', { width: 300, height: 68 }) ) ...; т.е. сделать работу с ним более прозрачной) Цитата:
|
Цитата:
Надергал так же ссылок по кропу и ресайзу. Что-то близко, но нужно ковырять. Записал для памяти, надеюсь, потом займусь) http://deepliquid.com/content/Jcrop_Manual.html http://evrone.github.io/evroneCrop/ https://github.com/evrone/evroneCrop http://odyniec.net/projects/imgareaselect/ http://vredniy.ru/2010/08/uploadify-jcrop-php/ http://habrahabr.ru/post/133351/ https://github.com/odyniec/imgareaselect http://habrahabr.ru/post/133362/ http://w3pro.ru/article/html-5-canva...chinayushchikh http://remysharp.com/2007/03/19/a-fe...nd-pluck/#crop https://developer.mozilla.org/ru/doc...BD%D0%BE%D0%BA P.S. Часто замечал в твоем коде this.scope.$$phase || this.scope.$apply();Каким принципом руководствуешься, когда проверяешь фазу? Просто всегда проверяешь или в случаях, когда появлялись ошибки при тестировании или по другим соображениям? P.P.S. Не очень понял как твой прогресс устроен. Т.е. просто берешь и делишь прогресс одного файла на количество файлов в очереди. Такая штука работает только если в один момент загружается один файл. На деле же при множественной загрузке загружаются сразу несколько файлов, поэтому прогресс каждого должен добавляться в общий |
Цитата:
Цитата:
- 2 - ресайз - >2 - кроп (насколько помню) Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
P.S. А не планируешь добавить сжатие изображений на клиенте (законченную версию, с формированием blob и сохранением на сервере в формате картинки), а я бы у тебя утащил))) P.P.S. Из руководства Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Загрузка одного файла на разные сервера... ИМХО, очень специфичная задача. Может быть какая-то распространенная хитрая оптимизация? Загрузка очереди по разным URL. Типа кидаешь 5 файлов в таблицу, и они записываются в каждую ячейку. Возможно, но мало кому надо. Цитата:
oi-file="options"можно задать свой объект с настройками. В каждом таком объекте мы задаем колбек change: function (file) { file.$upload(url + data.id, $scope.items[i], data.settings); } Из него мы получаем массив файлов и функцию загрузки. Можем теперь хоть каждый файл по отдельном URL загрузить Цитата:
Вот тут как раз думаю сделать как у тебя (в одно время загружается один файл), тогда в xhr можно будет не загружать модель, т.к. и так будет ясно для какой модели загрузился файл. Цитата:
|
Цитата:
Пока не забыл, хочу тут мысль запостить по поводу отправки файлов через $rootScope. Сейчас у меня ситуация такая, директивы ловят файлы и отправляют их в корневой скоп (по твоему совету). Это правильно и удобно, но не позволит создать два экземпляра загрузчика (независимых). Выход - каналы передачи данных. На примере: <html> <head> <script> app.run(function( $rootScope ) { $rootScope.$on( 'channel:name1', function() { // some code }); $rootScope.$on( 'channel:name2', function() { // some code }); }); </script> </head> <div> <div ng-file-drop channel="channel:name1"></div> </div> <div> <div ng-file-drop channel="channel:name2"></div> </div> </html> америку я, конечно, не открыл, но вдруг кому пригодится :) Цитата:
Цитата:
Цитата:
Цитата:
|
Не взяли меня фронтендщиком в Яндекс. Ну и ладно, больше времени на открытые проекты останется)
Обновил загрузчик: https://github.com/tamtakoe/oi.file Переделал загрузку, общий прогресс и проч. Теперь файлы загружаются по-очереди. Для этого пришлось запилить отдельную очередь для загружаемых файлов. Вынеся в эту же очередь ссылки на xhr, избавился от циклических ссылок, что позволило сделать отмену загрузки :-) Не стал засорять область видимости, поэтому туда копируется только один объект — очередь. Которая содержит как список загружаемых фалов, так и значения общего прогресса, кол-во загруженных байт и т.п. Теперь новая версия работает только в Ангуляре 1.2. Для старых версий сделал отдельню версию. Там совсем небольшие отличия. |
Shitbox2, не грусти, все будет хорошо :)
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
fileName fileThumb fileSize fileLoaded fileProgress fileUploading Это оправдано, т.к. половина из них могут и так содержаться и быть полезными в модели (fileName, fileThumb, fileSize). Остальные просто удаляются после окончания загрузки. С областью видимости всё не так. Сам по себе контроллер ни с какой моделью не связан и добавляя в область видимости кучу полей мы ее сильно замусориваем. Поэтому тут лучший вариант добавить один параметр — модель очереди загрузки и уже с ней работать. Цитата:
Не очень нравится как реализована у меня очередь... С deferred объектами... Думал, этот паттерн поддерживает поочередное выполнение процессов. Похоже, что нет... |
Цитата:
Цитата:
Цитата:
Цитата:
file.name file.thumb file.size ... Еще у меня есть мысль позаимствовать функции transformResponse для разбора ответа сервера. Что думаешь на этот счет? Кажется, здесь лежат $http.defaults.transformResponse |
Цитата:
---- ИМХО, события нужны для асинхронных вещей: пользователь нажал что-то, кто-то написал в чате и т.п. (мы не создаем запрос). Синхронные вещи — это удел обещаний: запрос к серверу, загрузка файлов (мы создали запрос и ожидаем ответ) Цитата:
Цитата:
function(data) { if (isString(data)) { // strip json vulnerability protection prefix data = data.replace(PROTECTION_PREFIX, ''); if (JSON_START.test(data) && JSON_END.test(data)) data = fromJson(data); } return data; } } У меня подобным занимается функция-обертка над angular.fromJson function _parseJSON (data) { if (typeof data !== 'object') { try { return angular.fromJson(data); } catch (e) { return false; } } return data; } } В принципе, идея здравая. Правда, не знаю, на сколько оправданы все их проверки. И в моем случае я парсю, только если этого не сделал $http, т.е. и так почти всегда использую дефолтный transformResponse. |
Цитата:
Цитата:
Цитата:
2. глобальный_скоп { scope { 2. тут поймали и остановили (чтобы не дошло до глобального скопа) scope: { 1. тут запулили событие вверх } } } Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
2. событие - это событие что мешает сделать пространство имен для событий? Мне, кстати, надо добавить :D Цитата:
event.stopPropagation(); Цитата:
2. зачем на одну, если можно на массив функций? (например) |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
добавь себе https://github.com/nervgh/angular-fi...rollers.js#L11 пригодится ) |
Цитата:
Цитата:
|
https://github.com/nervgh/angular-file-upload
Выглядит интересно. Мне щас как раз пилить мини галерею картинок с возможность загрузки файлов. Можно попробывать приспособить :) |
Цитата:
Цитата:
|
Цитата:
|
Shitbox2, что думаешь по этому поводу?
|
Часовой пояс GMT +3, время: 14:42. |