2016-04-12 2 views
0

У меня есть приложение, которое загружает несколько больших двоичных файлов и сохраняет их на диск. На некоторых машинах он работает нормально, а на некоторых других машинах время от времени загрузка будет продолжаться до 99,9%, а объект URLStream не будет срабатывать. Event.COMPLETEПочему URLStream иногда не срабатывает Event.COMPLETE?

Это почти идентично проблеме, которая появляется здесь:

Why does URLStream complete event get dispatched when the file is not finished loading?

Я попытался с помощью метода «кэш Bust», описанный в одном из ответов, но до сих пор нет костей.

Любая помощь будет оценена по достоинству.

Вот некоторые примеры кода, чтобы проиллюстрировать то, что я пытаюсь сделать:

var contentURL:String = "http://some-large-binary-file-in-amazon-s3.tar"; 

var stream:URLStream = new URLStream(); 
stream.addEventListener(Event.COMPLETE, function(e:Event):void{ 
    //This should fire when the file is done downloading 
    //On some systems this fails to fire once in a while 
    //On other systems it never fails to fire    
}); 
stream.addEventListener(ProgressEvent.PROGRESS, function(pe:ProgressEvent):void{ 
    //Write the bytes available in the stream and save them to disk 
    //Note that a download will reach 100% complete in terms of total progress but the 'complete' event might still not fire. 
}); 

var urlRequest:URLRequest = new URLRequest(contentURL); 
//Here we might add some headers to the URL Request for resuming a file 
//but they don't matter, the 'Event.COMPLETE' will fail to fire with our without 
//these headers 
addCustomHeaders(urlRequest); 

stream.load(urlRequest); 
+0

где код? – BotMaster

+0

Я обновил сообщение, чтобы содержать образец кода. – Phil

+0

** «В некоторых системах это не срабатывает раз в то время ... На других это никогда не терпит неудачу ...» * Я бы начал с проверки этих отказоустойчивых систем. Это проблема с подключением к Интернету (т. Е. Есть ли у них что-то, отсекающее большие загрузки? И т. Д.). Похоже на проблему с оборудованием/сетью, а не с чем-либо неправильным с вашим кодом (иначе он никогда не будет работать для всех систем, верно?). –

ответ

0

Имо это код означает потерпеть неудачу, когда вы намеренно отказаться от какого-либо контроля на то, что происходит, и просто предположим, что все будет работать само по себе и хорошо. Я никогда не имел никаких проблем с классом URLStream, но вот в основном то, что я никогда не делать:

  1. Я никогда не регистрировать все различные события ошибки в наличии (Вы не зарегистрированы).

  2. Я никогда не пользуюсь анонимными слушателями. Несмотря на то, что они не должны быть GC до тех пор, пока загрузка не будет завершена, это будет ненужной небезопасной ставкой, особенно потому, что URLStream не редко простаивает, загружая последние бит. Я бы не удивился, если бы удаление этих анонимных слушателей действительно устранило бы проблему.

+0

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

+0

Бессмысленно публиковать код, который не имеет никакого отношения к фактическому коду. В этом проблема существует. – BotMaster

Смежные вопросы