У меня есть ситуация в веб-приложении Flex, где мы используем веб-сервис PHP для поиска, чтения содержимого, а затем отправки данных в кодировке Base64 обратно в приложение Flex как часть XML-документа. Приложение Flex должно затем извлечь, Base64 декодировать байтовый поток, а затем отправить его НЕПОСРЕДСТВЕННО пользователю браузера (для загрузки) без записи файла на диск.

Все это должно происходить, например, при нажатии кнопки «СКАЧАТЬ СЕЙЧАС».

Я искал, но все, что я нашел, - это примеры либо загрузки с URL-адреса, либо фактической записи байтового потока на диск, чего я не хочу.

Мне нужно отправить поток прямо в браузер. Таким образом, я могу защитить файлы на сервере, находясь за пределами веб-пространства, а не в открытом доступе.

Кто-нибудь может помочь?

1
Troy Porter 16 Сен 2013 в 22:30
Я не понимаю ваш вопрос или проблему. Разве загрузка URL-адреса не является «отправкой потока байтов непосредственно в браузер»? Чтобы отправить в браузер «файл, не доступный через Интернет», вам придется написать код на стороне сервера, то есть доступный через Интернет, для загрузки файла и потоковой передачи байтов обратно. В зависимости от типа файла нет гарантии, что файл будет отображаться в браузере. Это зависит от типа файла и настроек браузера. Например, если мой браузер загружает PDF-файл, я получаю возможность «открыть» или «сохранить», потому что так настроен мой браузер.
 – 
JeffryHouser
16 Сен 2013 в 22:37

1 ответ

Лучший ответ

Вы можете вставить ByteArray в загрузчик, а затем использовать FileReference, чтобы инициировать диалог загрузки.

var file:FileReference = new FileReference();
var loader:Loader = new Loader();
//put loader in binary mode
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, loader_completeHandler);

//I will assume you are getting an appropriate ByteArray from your stream
var data:ByteArray = new ByteArray();
loader.loadBytes(data);

private function loader_completeHandler(evt:Event):void {
    //now pop a save window
    file.save(loader.data,"default_file_name.png")
}

редактировать

Я также предполагаю, что вы делаете это для потоковой передачи файла по нестандартному протоколу, например AMF, в противном случае вы просто выводите файл через HTTP, а все остальное обрабатывает браузер.

1
drkstr101 19 Сен 2013 в 03:02
Спасибо. Это очень помогло!
 – 
Troy Porter
26 Сен 2013 в 23:51