临时存储文件并在没有Air的AS3中再次加载它们

时间:2011-12-15 23:12:26

标签: actionscript-3 flex file caching temporary-files

我从服务器加载文件(或者更确切地说是图片),从技术上来说是从数据库加载。我一次显示一些,想象它像图像预览,并且我经常再次显示相同的图像。但我不想一次又一次地重新下载相同的文件,所以我想将它存储在本地,如果可用则从那里加载(或者在必要时下载)。如果文件可以存储在AppData / iDontCare中的某个临时文件夹中并在应用程序重启时被删除,我会很高兴。

File.applicationStorageDirectory适合账单,但仅存在于Air。

我错过了什么?

3 个答案:

答案 0 :(得分:3)

也许考虑将图像作为字节数组存储在共享对象中,这听起来不是最好的解决方案,但目前想到的是:)

在此处阅读更多内容:Is it possible to store images in the SharedObject of Flash?

除此之外,如果你没有使用AIR或第三方swf包装器,我相信你会受到浏览器缓存的支配,除非我忘记了别的东西。

答案 1 :(得分:2)

重新发明轮子没有任何意义,只需使用正确的标头设置服务器响应,以便Web浏览器可以缓存它们。设置服务器端应该相当容易,并且需要 no 设置客户端,只需像第一次那样再次加载所有内容,它将神奇地来自缓存而不是服务器。

关于缓存标头配置,see this question或简单地谷歌搜索一些更适合您特定情况的内容。

答案 2 :(得分:1)

也许,您可以在客户端尝试图像缓存。 例如:

<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