Временное хранение файлов и их повторная загрузка в AS3 без Air - PullRequest
2 голосов
/ 16 декабря 2011

Я загружаю файлы (точнее, изображения) в моем приложении Flex с сервера, технически из базы данных. Я отображаю некоторые из них одновременно, думаю, что это предпросмотр изображения, и довольно часто я снова показываю одно и то же изображение. Но я не хочу перезагружать один и тот же файл снова и снова, поэтому я хотел бы сохранить его локально и загрузить его оттуда, если он доступен (или загрузить его при необходимости). Я очень рад, если файлы могут быть сохранены во временной папке в AppData / iDontCare и удалены при перезапуске приложения.

File.applicationStorageDirectory соответствует всем требованиям, но существует только в Air.

Чего мне не хватает?

Ответы [ 3 ]

3 голосов
/ 16 декабря 2011

Может быть, стоит рассмотреть сохранение изображения в виде байтового массива в общем объекте, что не кажется лучшим решением, но это то, что приходит на ум в данный момент:)

Подробнее здесь: Можно ли хранить изображения в SharedObject of Flash?

Кроме этого, если вы не используете AIR или обертку SWF третьей части, я полагаю, что вы зависите от кеша браузера, если только я не забыл что-то еще.

2 голосов
/ 16 декабря 2011

Нет смысла изобретать колесо для этого, просто настройте ответы сервера с соответствующими заголовками, чтобы веб-браузер мог их кэшировать. Он должен быть довольно простым для настройки на стороне сервера и потребует no установки на стороне клиента, просто загрузите все заново, как вы делали это в первый раз, и он волшебным образом придет из кеша вместо вашего сервера.

Что касается конфигурации заголовка кэша, см. Этот вопрос или просто немного погуглите за то, что лучше подходит для вашего конкретного случая.

1 голос
/ 16 декабря 2011

Может быть, вы можете попробовать кэш изображений на стороне клиента. Пример:

<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/mx"
    xmlns:s="library://ns.adobe.com/flex/spark">

<s:layout>
    <s:VerticalLayout/>
</s:layout>

<fx:Script>
<![CDATA[
private function setView(index:int):void
    {
        tn.selectedIndex = index;

        switch(index)
        {
            case 0: 
                myCache.prioritize("Employees");
                break;
            case 1: 
                myCache.prioritize("Managers");
                break;
            case 2: 
                myCache.prioritize("Execs");
                break;
        }
    }       
]]>
</fx:Script>

<s:HGroup>
    <s:Button label="Employees" click="setView(0);"/>
    <s:Button label="Managers" click="setView(1);"/>
    <s:Button label="Execs" click="setView(2);"/>
</mx:HGroup>

<mx:TabNavigator id="navigator" width="100%" height="100%">
    <s:NavigatorContent label="Employees">
        <s:VGroup>
            <s:BitmapImage source="imgs/BigImage01.jpg" 
                contentLoaderGrouping="Employees" contentLoader="{myCache}"/>
            <s:BitmapImage source="imgs/BigImage02.jpg" 
                contentLoaderGrouping="Employees" contentLoader="{myCache}"/>
            <s:BitmapImage source="imgs/BigImage03.jpg" 
                contentLoaderGrouping="Employees" contentLoader="{myCache}"/>
            ...
        <s:/VGroup>
    </s:NavigatorContent>

    <s:NavigatorContent label="Managers">
        <s:VGroup>
            <s:BitmapImage source="imgs/BigImage06.jpg" 
                contentLoaderGrouping="Managers" contentLoader="{myCache}"/>
            <s:BitmapImage source="imgs/BigImage07.jpg" 
                contentLoaderGrouping="Managers" contentLoader="{myCache}"/>
            <s:BitmapImage source="imgs/BigImage08.jpg" 
                contentLoaderGrouping="Managers" contentLoader="{myCache}"/>
            ...
        <s:/VGroup>
    </s:NavigatorContent>

    <s:NavigatorContent label="Execs">
        <s:VGroup>
            <s:BitmapImage source="imgs/BigImage11.jpg" 
                contentLoaderGrouping="Execs" contentLoader="{myCache}"/>
            <s:BitmapImage source="imgs/BigImage12.jpg" 
                contentLoaderGrouping="Execs" contentLoader="{myCache}"/>
            <s:BitmapImage source="imgs/BigImage13.jpg" 
                contentLoaderGrouping="Execs" contentLoader="{myCache}"/>
            ...
        <s:/VGroup>
    </s:NavigatorContent>

</mx:TabNavigator>


<fx:Declarations>
    <s:ContentCache name="myCache" enableQueuing="true"/>
</fx:Declarations>

Посмотрите на следующую ссылку: http://opensource.adobe.com/wiki/display/flexsdk/Spark+Image

...