Xpoint
   [напомнить пароль]

Flash Uploader с докачкой

Метки: [без меток]
[удл]
2010-07-04 22:13:58 [обр] Филипп Ткачев(0/112)[досье]
Стоит задача загружать большие файлы на сервер через веб-интерфейс, как правило через прокси-сервер. Размер в районе десятков-сотен мегабайт. Лучшее решение на мой взгляд - загрузка по FTP с докачкой при обрыве.
С Flash я никогда не работал и не знаю сетевых возможностей этой технологии. Но в голову пришла идея реализовать на ней загрузчик с докачкой именно по FTP-протоколу. Возможно ли сделать такую штуку и, если да, то с чего именно начать, какие сайты лучше посетить, какие книги почитать? Какие инструменты потребуются для разработки?
спустя 8 дней [обр] Алексей В. Иванов(276/2861)[досье]
По-моему, нереально. Нет возможности закачать/прочитать файл с середины.
спустя 4 часа 47 минут [обр] Филипп Ткачев(0/112)[досье]

Я тут почитал немного документацию по Action Script 3 и нашел в ней класс Socket, который "позволяет коду создавать подключения к сокету, а также считывать и записывать необработанные двоичные данные". Если на нем реализовать Ftp-клиент?

Я тут даже попытался составить некоторое ТЗ.

Интерфейс: кнопка Upload. после выбора файла нужно нажать Submit

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

должна быть кнопка паузы и отмены передачи. должна быть скрытая консоль отладки (в нее насыпать весь обмен, повторы и т.п.)

интерфейс резиновый.

[==== 10% ] cancel

126000 / 12884735 byte 12 kbps PAUSE

Вызываться должен так:

path-to-uploader.swf?rpc=path-to-rpc-file&debug=1 (debug на первое время)

при первой загрузке страницы, на которой установлен компонент, он осуществляет запрос на сервер к файлу path-to-rpc-file методом GET c параметром p=uploader.init

в ответ он получит XML или JSON структуру (не знаю, какую удобно) содержащую локализацию (это надо будет скэшировать и не грузить повторно). по умолчанию локализация английская.

после этого появится кнопка Выбрать файл. Выбираем файл.

Аплодер делает 2-й запрос на path-to-rpc-file, передает POSTом имя файла и его размер, в ответ получает разрешение (или запрет) на загрузку и строку с авторизацией и путем на фтп сервере (при условии что разрешено).

Например: загружаем файл "условия контракта.doc", происходит

POST на

http://server.ru/rpc.php?p=uploader.file

filename="условия контракта.doc"

filesize="12884735"

session_id="что угодно лишьбы было достаточно уникальным, если откроют 2 таких флешки"

в ответ приходит

allow=true

path=ftp://user:password@ftp.may-be-other-server.domain/some/path/to/file.doc

timeout=30

После получения этого он начинает закачку на этот сервер. Если происходит обрыв, пытается произвести докачку, если сервер поддерживает докачку, если докачка не поддерживается сервером делает повтор 1 раз. потом говорит, что нельзя загрузить.

при докачке и повторе обязательно показывает, что это происходит.

Как организуется докачка. Как известно, при обрыве соединение отваливается по таймауту. Это я думаю можно определить. Далее флешка снова лезет на ftp и считывает размер файла (команда SIZE), сверяет его с размером загружаемого файла. Если размеры неодинаковы, пытается докачать. FileZilla и TotalCommander как-то это делают. Работают они также на уровне сокетов, а значит можно разобраться как.

Получается на флеше пишется такой ftp-клиентик, который умеет заливать файлы на сервер.

С безопасностью вроде тоже можно разобраться, есть файлы политик сокетов.

спустя 7 месяцев [обр] Филипп Ткачев(0/112)[досье]
К сожалению, так и не занялся освоением Action Script, но зато нашел достаточно неплохое решение для закачки больших файлов на сервер.
Суть заключается в том, что большой файл дробится на фрагменты, которые закачиваются по очереди. Это увеличивает число запросов к серверу, но уменьшает вероятность того, что большой файл будет не загружен.
Powered by POEM™ Engine Copyright © 2002-2005