Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.11.2009, 18:52
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 11  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
А без докачки работает?
  1. Попробуйте закачать текстовый файл. Если всё нормально, ищите ошибку в создании изображения.
  2. Вообще говоря, читать из потока лучше определёнными порциями. Пусть, например, константа CHUNK задаёт минимальное количество байт, читаемых из потока, то есть порцию. Тогда:
Код AS3:
/**
 * Перед началом закачки.
 */
var data:ByteArray = new ByteArray(); //скачанные данные
var totalRead:uint = 0; //всего скачано
 
/**
 * Перед началом докачки.
 */
totalRead = data.length;
 
/**
 * В обработчике PROGRESS.
 * stream – ваш экземпляр URLStream.
 */
var toRead:uint = stream.bytesAvaliable;
if(toRead >= CHUNK){
	urlStream.readBytes(data, totalRead, toRead);
	totalRead += toRead;
}
 
/**
 * В обработчике COMPLETE.
 * stream – ваш экземпляр URLStream.
 */
var toRead:uint = stream.bytesAvaliable;
if(toRead){
	urlStream.readBytes(data, totalRead, toRead);
	totalRead += toRead;
}
Добавлено через 5 минут
Кстати, у вас может не получаться по следующей причине: ваш сервак просто не поддерживает докачку. Хоть это и маловероятно, но такой вариант всё-же имеется. Дело в том, что в этом случае ваш try..catch не сработает. Все пройдёт без ошибок, но данные начнут отдаваться с начала файла, как если бы вы не отправляли заголовка Range.

Узнать, поддерживает ли сервак докачку, можно только просмотрев ответные заголовки (в них должен присутствовать заголовок Accept-Ranges). К сожалению, из-под FP это сделать нельзя, только из-под AIR.

Поэтому, попробуйте с текстовым файлом и посмотрите, что получится. А также советую посмотреть диалог флешки с серваком тем же FireBug-ом. Заодно увидите, отправляет ли сервак Accept-Ranges, а также отправляет ли флешка Range.

Добавлено через 24 минуты
Вот ещё что. Подпишитесь-ка на событие HTTPStatusEvent.HTTP_STATUS вашего экземпляра URLStream, и в обработчике протрейсите

Код AS3:
trace('Status code: ' + (event as HTTPStatusEvent).status);
Чему он равен?

Если после запроса, содержащего Range, статус-код равен 200, то сервак докачку не поддерживает. Если же он равен 206, что указывает на выдачу частичного содержимого, то всё нормально и проблема, скорее всего, в чём-то другом.

Добавлено через 32 минуты
Цитата:
Сообщение от iflamberg Посмотреть сообщение
Другого способа (без программирования на сервере) - нет.
Вы не правы. Как тогда, по-вашему, работают программы типа DownloadMaster или встроенная в Оперу качалка? Они ведь реализуют докачку практически со всех серваков)

Из-под флеш-плеера докачку реализовывать не приходилось, но из-под AIR проблем особых не возникло. К счастью, статус-код можно посмотреть и из флеш-плеера, поэтому тут тоже проблем быть не должно, хоть и будет чуть менее надёжно без анализа ответных заголовков.


Последний раз редактировалось SamFR; 20.11.2009 в 19:26.
Старый 25.11.2009, 14:40
mrMEM вне форума Посмотреть профиль Отправить личное сообщение для mrMEM Найти все сообщения от mrMEM
  № 12  
Ответить с цитированием
mrMEM

Регистрация: Feb 2009
Сообщений: 63
up message

Добавлено через 27 минут
Цитата:
Сообщение от SamFR Посмотреть сообщение
Кстати, у вас может не получаться по следующей причине: ваш сервак просто не поддерживает докачку.
качал файлы Download Master-om - разбивает на части, и после приостановки докачивает

Цитата:
Сообщение от SamFR Посмотреть сообщение
Дело в том, что в этом случае ваш try..catch не сработает. Все пройдёт без ошибок, но данные начнут отдаваться с начала файла, как если бы вы не отправляли заголовка Range.
Это то, что нужно. Данные должны отдаватсья с начала, если невозможно получить данные с контрольной точки. Почему-то если запускаю swf со своего компьютера, а не с сервера и качаю фотографии с сервера, без try..catch получаю ошибку; в представленном варианте кода данные качаются с начала.

кстати событие HTTPStatusEvent.HTTP_STATUS почему-то срабатывает после закачки..

SamFR, спасибо за дельные советы

Старый 25.11.2009, 16:12
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 13  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Цитата:
Сообщение от mrMEM Посмотреть сообщение
Почему-то если запускаю swf со своего компьютера, а не с сервера и качаю фотографии с сервера, без try..catch получаю ошибку; в представленном варианте кода данные качаются с начала.
Скорее всего, это ошибка безопасности, так как котент, запущенный в локальной зоне безопасности, не может обращаться к сети.

Цитата:
Сообщение от mrMEM Посмотреть сообщение
кстати событие HTTPStatusEvent.HTTP_STATUS почему-то срабатывает после закачки..
Так и должно быть. И это основная проблема, так как узнать, что сервер не поддерживает докачку и отдавал нам данные с начала, мы сможем только после завершения закачки.

Цитата:
Сообщение от mrMEM Посмотреть сообщение
SamFR, спасибо за дельные советы
Да не за что

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:04.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:04.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.