![]() |
можно ли загружать данные в URLStream с конкретного места?
Допустим мы создаем поток URLStream и начинаем загружать в него данные
в какой-то момент времени, когда данные еще не полностью загружены мы вызываем функцию close() для того чтобы приостановить загрузку, предворительно сохранив загруженные данные в массив Код AS3:
|
гуглить по "flash HTTP-streaming", "flash эмуляция потокового видео через HTTP".
Вот, например, на первой жк странице http://crocodile2u.habrahabr.ru/blog/30402/. Другого способа (без программирования на сервере) - нет. |
это не то
мне не нужна потоковая загрузка видео задача в том чтобы закачивать файлы любого типа (сейчас для меня актуальны изображения) если часть его была закачана, то нужно возобновить загрузку с того места где загрузка была приостановлена. |
Цитата:
Вам нужно передавать заголовок Range c содержимым "bytes=байт_с_которого_качать-". Далее начинать закачку и, например, каждый PROGRESS читать из потока количество байт, равное URLStream.bytesAvaliable, и дописывать их в конец tmpByteArray. |
2mrMEM:
Обычно такие вопросы возникают с видео, поэтому и давал соответсвующую инфу. В общем случае: Чтобы сервер знал, что данные нужно отдавать не с начала, а с определенной позиции - нужно серверу передать с какой позиции передавать данные. на сервере тогда должен быть код, например php-код, что-то типа: Код:
$start = (int) filter_input(INPUT_GET, 'position', FILTER_VALIDATE_INT); |
SamFR, куда передавать заголовок Range?
iflamberg, я правильно понимаю, что без PHP здесь не обойтись? |
Конечно, всё зависит от серверной реализации, но стандарт HTTP/1.1 диктует именно такой способ получения частичного содержимого – с помощью заголовков Range и Content-Range. И большинство серверов, поддерживающих докачку (то есть выдачу частичного содержимого), реализуют именно этот стандарт.
Добавлено через 3 минуты Заголовок Range передавать в запросе серверу. См. URLRequest.requestHeaders и класс URLRequestHeader. В ответе вам придёт заголовок Content-Range, указывающий, какой диапазон данных сервак будет отдавать. В некоторых случаях (хотя очень редко) он может не совпадать с тем, что вы запросили в Range. Но, опять же повторюсь, сервак должен поддерживать этот способ закачки (то есть в ответе выдавать заголовок Accept-Ranges). Добавлено через 6 минут Также советую почитать спецификацию HTTP/1.1 или (даже лучше) статью Википедии про HTTP (http://ru.wikipedia.org/wiki/HTTP), а конкретно её раздел "Докачка и фрагментарное скачивание". Там всё очень подробно разжёвано. |
с URLRequest должен разобраться, спасибо
а как я могу узнать, что сервер поддерживает этот способ закачки? вопрос состоит во-первых в том, чтобы как правильно выбрать сервер под эти нужды, а во-вторых, могу ли я узнать об этом програмно, быть может try мне поможет? |
Цитата:
try тут не при чём. Добавлено через 14 минут Боюсь только, что определить это вы сможете только из-под AIR, если речь идёт о флэше. Сейчас посмотрел – событие httpResponseStatus объекта URLStream доступно только для эйра. Как и свойство HTTPStatusEvent.responseHeaders. Где тут угроза безопасности – не знаю, но факт остаётся фактом. |
чтобы реализовать докачку, делаю так:
Код AS3:
http://reditstudio.ru/tmp/Test.swf, проверяю докачку, запрос работает, но данные не верно интерпретируются при переводе в графический вид. подозреваю, что параметр byteArray.length неправильный. byteArray - массив, в который заливаются данные из потока. это происходит так: Код AS3:
|
| Часовой пояс GMT +4, время: 05:36. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.