Comments 39
UFO landed and left these words here
Круто! Я даже не ожидал, что тут будет техническая информация о реализации. Надеюсь, что это не последний пост подобного характера.
Спасибо, у нас на проекте хотим сделать нечто подобное — у нас люди загружают порой по 100 фото и на каждую приходится тыкать. Ваша статья как раз «в руку».
Жаль, что даже к версиям XX браузеры не избавились от багов в таких важных и давно введённых «фичах»… ну, будем ждать версий XXX, благо, что сейчас все с этим делом ускорились:)
Вы не сталкивались с тем, что в опере onreadystatechange вызывается с status=0 без видимой причины?
12 версия, запросы не через FormData, а через xhr.send(Blob).
При этом оперу колбасит и она начинает формировать битые запросы.
// если размер больше, чем 4кб, то это точно файл if (file.size > 4096) {
Не совсем так. Встречаются папки, «размер» которых может быть больше 4096 байт. Так что делать окончательный вывод о том что это не папка, оперирую только размерами <4кб — не совсем верно.
Да, но в большинстве случаев это подходит. Не всегда подходит в linux или если диск отформатирован не со стандартным кластером в 4кб, может быть есть еще какие-то кейсы.
Мы эту проверку уберем, когда внедрим поддержку папок, она там появилась, в основом, из-за падений хрома.
А в каких случаях хром падал, есть ли конкретный кейс как его уронить таким образом? Я просто не замечал падений, даже при файлах > 1гб.
У меня и в 21 хроме не было падений, отсюда и возник этот вопрос.
если делать abort в filereader, то у нас стабильно через 1-15 минут падала вкладка
кстати, может и в 21-м уже где-то поправили, мы зарелизились в один день с ним и наблюдали эти падения
А зачем делать abort? Можно было изначально читать не весь файл, а предварительно сделать slice на 1 байт.
Было бы хорошо, если бы весь хотя бы клиентский код был доступен в виде готового решения для простых смертных.
Спасибо! Давно пора было сделать, на самом деле. И ещё в Я.Фотках сделайте нормальный загрузчик, пожалуйста.
Без FormData можно обойтись. Для Оперы 11.60 и выше это можно сделать без проблем(ну или почти без проблем). Кстати, как это сделать, я уже писал почти год назад
Большое спасибо за это нововведение. Я то его сразу заметил, так как с обычным загрузчиком возникало много проблем на работе.
Дело в том что там криво настроенный прокси поднят (не мной, я только пользователь), так вот приходилось каждый раз сначала пытаться загрузить файл в аттач, а когда это не выходило (ошибка подключения) нажимать на ссылку воспользоваться обычным загрузчиком, который в принципе работал (хоть и не был таким удобным.
Drag&Drop загрузчик уже опробовал, ооочень удобно стало, и не только из-за исчезнувших технических проблем (я на двух мониторах работаю — с одного на другой очень удобно файлы перетаскивать).
Тоже заметил — спасибо, удобно. Осталось только сделать, чтобы при клике на «Спам» письма с этого ящика больше не приходили, а то в этой кнопке вообще нет смысла — столько раз нажимал, а письма (такие же) все приходят и приходят. Извиняюсь за небольшой оффтоп.
а напишите мне, пожалуйста, в личку логин и id-писем (из урла), мы проверим
А мне кажется спорный момент загружать один из 10 файлов на яндекс.диск, а остальные вкладывать в письмо. Ведь когда смотришь письмо, есть кнопка «Сохранить все файлы/вложения» и в этом случае она теряет смысл. Было бы удобно, если бы в случае 10 файлов (с одним большим) они загружались как пакет (папка) на яндекс.диск и была возможность так же скачать их одним zip-архивом.
Почта еще сегодня очень порадовала, вывесив при входе что-то вроде «Теперь почта доступна на английском, кликните здесь, чтобы включить».
Это не сарказм, я на самом деле переключился на английский. Так что да — и браузер, и ОС не на русском :)
Очередное доказательство жудкой сложности и неказистости совремнной веб-платформы: такие тривиальные задачи вызывают такое количество роблем :-(

Яндексу зачет за такое глубокое исследование роблемы и любовь к деталям в реализации.
Сам не так давно долго возился с доработкой d&d аплоадера, так что очень хорошо понимаю эти мучения.
Не совсем понял необходимость пляски с FileReader, если у вас уже есть .dataTransfer с типами.
Все, понял, не загружать для старших браузеров. А почему родилось такое предположение, что попытка загрузки папки — это скорее всего ошибка пользователя? Или это для стандартизации возможностей?
Это нормальная возможность для драг-н-дропа, но с папками из браузера ничего пока сделать нельзя (кроме chrome 21+), поэтому их надо отсеивать
Вот бы вы с Mail.ru сделали единую современню кроссбраузерную OpenSource поддерживаемую и обновляемую библиотеку со всеми этими своими фичами определения возможностей, множественной загрузкой, flash fallback, ресайзом картинок в браузере — миллионы людей бы вам спасибо сказали.
Only those users with full accounts are able to leave comments. Log in, please.

Information

Founded
Location
Россия
Website
www.yandex.ru
Employees
over 10,000 employees
Registered

Habr blog