2012-03-12 4 views
0

Я хочу, чтобы пользователи веб-сайта могли загружать файлы с моего сайта, но с помощью клиентского загрузчика с возможностью продолжения прерванной загрузки.JavaScript-загрузчик

Например, я хочу отправить человеку файл размером 30+ Мега. Я хочу, чтобы у пользователя был лучший опыт загрузки, поэтому я не могу позволить ему загружать 25 мегабайт, а затем снижать загрузку из-за проблем с сетью на его стороне.

Поэтому я хочу, чтобы на странице загрузки был загружен javascript-загрузчик, который покажет фактическую доставку файла на стороне клиента и когда он будет загружен, чтобы предоставить пользователю возможность сохранить файл.

Или это невозможно из-за того, что javascript не сможет открыть диалоговое окно сохранения и сохранить в файловой системе?

ответ

3

Я боюсь, что это не возможно с JavaScript и вот почему:

Чтобы продолжить загрузку с определенного момента вы должны отправить на сервер номер позиции, чтобы начать загрузку с. И поскольку JavaScript не имеет доступа к локальной файловой системе, вы не можете получить эту позицию.

UPD: кажется, что я слишком спешил с ответом. Размер файла можно получить с помощью HTML5 File API и после получения размера файла вы можете передать его на сервер, который должен поддерживать частичную загрузку.

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

UPD2: работать с файлами в некоторых интернет-Explorers вы можете использовать FileSystemObject:

var fso; 
fso = new ActiveXObject("Scripting.FileSystemObject"); 
+0

Вы можете использовать куки-файл, в котором хранятся загруженные файлы и копируются вместе с загрузчиком AJAX. Но я не уверен. – Manishearth

+0

Я обновил свой ответ с большим количеством данных, но, похоже, полнофункциональная частичная загрузка в любом случае невозможна. – Minras

+0

@Manishearth, как я вижу, когда соединение прерывается, PHP не может отслеживать это и не может отправлять правильные заголовки файлов cookie после потери связи. – Minras

0

Я бы попытаться сделать плагин или расширение. Как и те расширения DownloadThemAll для Firefox и Google Chrome. Другой альтернативой может быть использование Flash, либо отдельно, либо интеграция с javascript, как показано здесь: http://www.communitymx.com/content/article.cfm?cid=0922A