FileReference.load() не заполняет FileReference.data

Я пытаюсь использовать метод загрузки объекта FileReference для загрузки данных и использования его для отображения миниатюры выбранного изображения.

Однако после вызова fr.load() fr.data остается null.

Я использую Flex Builder 3.0.2 в Windows 7 с Flex SDK 3.4 и отладкой Flash Player 10. Если я оцениваю fr.load() в списке контрольных переменных Eclipse, я получаю сообщение об ошибке "No such variable: load."

Кто-нибудь знает, почему это происходит?


person jeffcook2150    schedule 11.11.2009    source источник
comment
Вы импортировали flash.net.FileReference   -  person Treby    schedule 11.11.2009
comment
+1, потому что я кое-что узнал из этого вопроса.   -  person Amarghosh    schedule 11.11.2009


Ответы (5)


Вы ждете завершения load()? Попробуйте добавить EventListener для прослушивания завершения загрузки.

документы FileReference

fr.addEventListener(Event.COMPLETE, function(e:Event):void {
                                        handleLoad(e);
                                    });

Функция handleLoad, которую вы пишете, может получить данные через e.target.data.

person dustmachine    schedule 11.11.2009
comment
Это была проблема, спасибо. Раньше я знал, что должен дождаться события, но забыл. Еще раз спасибо. - person jeffcook2150; 11.11.2009

РЕДАКТИРОВАТЬ: Это применимо только к FP9.


Вы уверены, что используете правильный класс? FileReference не имеет метода load или свойства data. Я предполагаю, что вы имеете в виду класс URLLoader - у него есть и то, и другое, и это то, что вы должны использовать для загрузки данных. Класс FileReference предназначен для загрузки файлов с сервера в компьютер пользователя (не в SWF) и загрузка файлов с компьютера пользователя на сервер.

Используйте класс URLLoader для загрузки данных в SWF и Класс Loader для загрузки других SWF-файлов и изображений в SWF. Класс Loader имеет свойство content, аналогичное свойству data класса URLLoader, которое будет содержать загруженный контент. Методы load() обоих этих классов являются асинхронными (возвращаются, не дожидаясь завершения загрузки), и, следовательно, как отметил @dustmachine, вы можете получить доступ к загруженным данным/содержимому только после запуска Event.COMPLETE.

var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, onLoad);
urlLoader.load(new URLRequest(theURL));

private function onLoad(e:Event):void
{
  var urlLoader:URLLoader = URLLoader(e.target);
  trace(urlLoader.data);
}
person Amarghosh    schedule 11.11.2009
comment
Спасибо за этот ответ, но с ActionScript 3 и Flash Player 10 FileReference имеет метод load() (который загружает содержимое файла в ByteArray) и свойство данных (которое содержит вышеупомянутый ByteArray). Однако мне пришлось обновить и перенастроить Flex Builder, чтобы он увидел эти вещи. - person jeffcook2150; 11.11.2009
comment
Спасибо, что поправили меня - еще не делал конкретных вещей для FP 10. - person Amarghosh; 11.11.2009

У меня была такая же проблема с классом FileReference и функцией load(). Проблема может быть решена таким образом:

  1. Откройте вкладку «Путь сборки Flex».
  2. Разверните «Flex 3», выберите «playerglobal.swc» и нажмите «Удалить».
  3. Обратите внимание на путь к каталогу в «Flex 3 -» (в моей системе это /Applications/Adobe Flex Builder 3 Plug-in/sdks/3.2.0).
  4. Нажмите «Добавить SWC» и перейдите по этому пути, а затем углубитесь в frameworks/libs/player/10, выберите playerglobal.swc.
  5. Разверните «playerglobal.swc», дважды щелкните «Тип ссылки» и измените его на «Внешний».
  6. Откройте вкладку «Flex Compiler».
  7. В «Оболочке HTML» измените «Требуется версия Flash Player» на 10.0.0.
person Eugene    schedule 09.04.2010

Вы передавали что-нибудь в файл fileReference.

например из сетки данных

var listFiles:DataGrid = new DataGrid();
var _refUploadFile:FileReference = new FileReference();                 
_refUploadFile = listFiles.selectedItem.file;   

_refUploadFile.load();
person Treby    schedule 11.11.2009

Сначала вы должны сделать следующее:

fileReference.cancel();
person weishoubo    schedule 10.12.2013