![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Скачиваю файл с помощью URLStream, а на выходе размеры изначального файла и скаченного отличаются. Например, 22,526,758 bytes -VS- 22,527,070 bytes... Визуально вроде ничего не меняется, но вот с видеоролики страдают(что-то с ключевыми точками). Да и вообще, почему так происходит и как это лечить?
Ниже код качателя: package { import flash.events.DataEvent; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.OutputProgressEvent; import flash.events.ProgressEvent; import flash.filesystem.File; import flash.filesystem.FileMode; import flash.filesystem.FileStream; import flash.net.URLRequest; import flash.net.URLStream; import flash.utils.ByteArray; public class Downloader extends EventDispatcher { [Event(name = "DownloadComplete",type = "DownloadEvent")] private var file:File; private var fileStream:FileStream; private var url:String; private var urlStream:URLStream; private var waitingForDataToWrite:Boolean = false; public function Downloader() { urlStream = new URLStream(); urlStream.addEventListener(Event.OPEN, onOpenEvent); urlStream.addEventListener(ProgressEvent.PROGRESS, onProgressEvent); urlStream.addEventListener(Event.COMPLETE, onCompleteEvent); fileStream = new FileStream(); fileStream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, writeProgressHandler); } public function download(formUrl:String, toFile:File):void { this.url = formUrl; this.file = toFile; fileStream.openAsync(file, FileMode.WRITE); urlStream.load(new URLRequest(url)); } private function onOpenEvent(event:Event):void { waitingForDataToWrite = true; dispatchEvent(event.clone()); } private function onProgressEvent(event:ProgressEvent):void { if (waitingForDataToWrite) { writeToDisk(); dispatchEvent(event.clone()); } } private function writeToDisk():void { var fileData:ByteArray = new ByteArray(); trace(urlStream.bytesAvailable); urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); fileStream.writeBytes(fileData,0,fileData.length); waitingForDataToWrite = false; dispatchEvent(new DataEvent(DataEvent.DATA)); } private function writeProgressHandler(evt:OutputProgressEvent):void { waitingForDataToWrite = true; } private function onCompleteEvent(event:Event):void { if (urlStream.bytesAvailable > 0) { writeToDisk(); } fileStream.close(); fileStream.removeEventListener(OutputProgressEvent.OUTPUT_PROGRESS, writeProgressHandler); dispatchEvent(event.clone()); // dispatch additional DownloadEvent dispatchEvent(new DownloadEvent(DownloadEvent.DOWNLOAD_COMPLETE, url, file)); } }}
__________________
uglan |
|
|||||
|
.
|
Это нафига устанавливать? По дефолту булеан и так false. А объявление тратит присвоение в байтоде. Это касается всех типов.
А это работает в объявлении класса? Я просто привык это видеть на "уровне пакета". public class Downloader extends EventDispatcher { [Event(name = "DownloadComplete",type = "DownloadEvent")] Похоже, вам проще было отекстендиться от URLStream, чем решать это композицией. Но это уже мое субъективное мнение. Зачем каждый раз создавать такую штуку? Вы не ищете легких путей. Может по прогрессу просто писать в буфер, а потом в файл, а по комплиту закрывать файлстрим? Я бы так сделал. |
|
|||||
|
Если файл большой(а это так) то он сжирает под себя много памяти и я нервничаю. То есть кроме этих недочетов ничего подозрительного нет? А ведь где-то он косячит и недогружает байты... Я нашел в этом систему закачанный файл всегда меньше оригинала на 286 байтов... Что за мистика?
__________________
uglan |
|
|||||
|
.
|
Да ладно. А что будет, если onProgressEvent придет раньше, чем waitingForDataToWrite будет равно true. Тут уже я начинаю нервничать.
Добавлено через 3 минуты URLStream вроде бы представляет собой буфер текущей пачки данных. На следующий прогресс эти данные вроде как заменяются новыми. |
|
|||||
|
Цитата:
Добавлено через 47 часов 57 минут Новости! Новости! Как я не лопатил код, ничего толкового не выходило, и тут я решил проверить сколько же весит файл на сервере. Какого было мое удивление, когда я обнаружил что файл там весит столько же сколько скачивается на компьютер через флеш. То есть с кодом все в порядке и он скачивает именно столько сколько лежит на сервере. Вопрос в том почему когда я скачиваю ФТП клиентом или просто по ссылке файл становится больше на 286 байт и обратно когда я заливаю его на сервер он становится на 286 байт меньше. Что за магия такая?! Кто с таким сталкивался? Ничего не понимаю...
__________________
uglan |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:29. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| file , URLStream |
| Опции темы | |
| Опции просмотра | |
|
|