Как я могу преобразовать файл в ByteArray во Flex? - PullRequest
1 голос
/ 29 мая 2009

Мне было интересно, как преобразовать файл на моем сервере (pdf / excel / ppt) в ByteArray. Причина, по которой я хочу сделать это, состоит в том, чтобы отобразить диалог open / save как для пользователя, и я должен установить Content-Type на octet-stream. Диалог хорошо работает только с navigateToURL (), но для pdf это локальный браузер пользователя. Для URLRequest я должен установить данные как ByteArray. Я пытаюсь использовать код, расположенный здесь:

Печать на заказ с помощью Flex

Ответы [ 2 ]

5 голосов
/ 29 мая 2009

Если вы нацелены на Flash Player 10, это должно работать:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="loadFile()">

    <mx:Script>
        <![CDATA[

            private var loadedFile:ByteArray;

            private function loadFile():void
            {
                var request:URLRequest = new URLRequest("http://test.enunciato.org/sample.pdf");
                var urlLoader:URLLoader = new URLLoader(request);

                urlLoader.addEventListener(Event.COMPLETE, onURLLoaderComplete);
                urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
                urlLoader.load(request);
            }

            private function onURLLoaderComplete(event:Event):void
            {
                loadedFile = event.target.data;
            }

            private function saveLoadedFile():void
            {
                var file:FileReference = new FileReference();
                file.save(loadedFile, "SampleDoc.PDF"); 
            }

        ]]>
    </mx:Script>

    <mx:Button label="Save Image" horizontalCenter="0" verticalCenter="0" click="saveLoadedFile()" />

</mx:Application>

Предполагается, что вы сначала загрузите файл - в этом примере операция загрузки происходит при creationComplete, и байты сохраняются в загруженном файле - байты должны быть готовы для сохранения, когда пользователь нажимает Сохранить изображение. Протестировано и проверено, пример работает. Надеюсь, это поможет!

0 голосов
/ 29 мая 2009

Я думаю, что вы можете сделать что-то вроде этого, чтобы получить массив байтов:

private var fileBytes:ByteArray = null;

private static function loadByteArray(url:String):void {
      var loader:Loader = new Loader();

      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
      function(e:Event):void {
        fileBytes = e.currentTarget.bytes;
      });
      loader.load(new URLRequest(encodeURI(url)));
}

// static initializer
{ loadByteArray("my url here"); }

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

Однако звучит так, будто вы хотите получить файл непосредственно с вашего сервера, а не выполнять трехстороннюю поездку (файл приходит с сервера, вы отправляете байты обратно на сервер, а затем, наконец, они возвращаются к клиент). В этом случае вы можете попытаться установить тип содержимого и расположение содержимого для вложения на сервере (например, для pdf, это будет означать установку типа содержимого "application / pdf" и добавление "Content-Disposition: attachment; filename = myFileName". pdf "к заголовкам вашего ответа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...