Почему URLStream иногда не запускает Event.COMPLETE?

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

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

Почему событие завершения URLStream отправляется, когда файл еще не загружен?

Я попытался использовать метод "Cache 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 );

1 ответ

По моему мнению, это код, предназначенный для сбоя, когда вы намеренно отказываетесь от контроля над тем, что происходит, и просто предполагаете, что все будет работать само по себе и работать хорошо. У меня никогда не было проблем с классом URLStream, но вот что я никогда не делаю:

  1. Я никогда не регистрирую все различные доступные ошибки (вы не регистрируете их).

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

Другие вопросы по тегам