Pro FLASH:
Chcete-li uložit data lokálně pomocí flash, můžete použít jeden ze 3 způsobů:mezipaměť Flash Player, SharedObject nebo FileReference objekt. A pro váš lokální soubor zapomeňte na PHP a MySQL, protože mluvíme pouze o datech, která máte ( json, xml, txt, ... ).
- Mezipaměť přehrávače Flash Player:
Měli byste vědět, že ve výchozím nastavení Flash Player ukládá místní kopii vašeho souboru do své mezipaměti. Tuto místní kopii můžete použít jako offline zdroj vašich dat, ale nezapomeňte, že flash player neuložil poslední verzi vašeho vzdáleného souboru, ale první a že http://www.example.com/data.php se liší od http://www.example.com/data.php?123 i když je to stejný soubor! Další podrobnosti o tom najdete v mé odpovědi na tuto otázku .
- SharedObject :
Neznám velikost vašich načtených dat, ale jak řekl Adobe o SharedObject:
Myslím, že se to nepoužívá pro velké soubory a nedoporučuje se ukládat soubory, ale nějaká jednoduchá data. SharedOject samozřejmě jako soubor cookie pro prohlížeč potřebuje autorizaci uživatele k zápisu dat na pevný disk a uživatel je může kdykoli smazat.
- FileReference :
Myslím, že toto je nejlepší způsob, jak dělat to, co hledáte. Měli byste vědět, že chcete-li uložit soubor pomocí FileReference, váš uživatel je vyzván, aby si vybral soubor pro uložení dat a přečetl jej podruhé. Takže pokud si nepřejete interakci uživatele s vaší aplikací, zapomeňte na tento způsob.
FileReference pomocí příkladu :
var local_file_name:String = 'local.data',
file:FileReference = new FileReference(),
local_file_filter:FileFilter = new FileFilter('local data file', '*.data'),
remote_data_url:String = 'http://www.example.com/data.php',
url_request:URLRequest,
url_loader:URLLoader,
connected:Boolean = true;
if(connected){
get_remote_data();
} else {
get_local_data();
}
function get_remote_data(): void {
//we use a param to be sure that we have always the last version of our file
url_request = new URLRequest(remote_data_url + ('?' + new Date().getTime()));
url_loader = new URLLoader();
url_loader.addEventListener(Event.COMPLETE, on_data_loaded);
url_loader.load(url_request);
}
function get_local_data(): void {
// show the select dialog to the user to select the local data file
file.browse([local_file_filter]);
file.addEventListener(Event.SELECT, on_file_selected);
}
function on_data_loaded(e:Event): void {
var data:String = e.target.data;
// if the remote data is successfully loaded, save it on a local file
if(connected){
// show the save dialog and save data to a local file
file.save(data, local_file_name);
}
// use your loaded data
trace(data);
}
function on_file_selected(e:Event): void {
file.addEventListener(Event.COMPLETE, on_data_loaded);
file.load();
}
Tento kód se uživateli zobrazí pokaždé, když se zobrazí dialog pro uložení, samozřejmě, je to jen ukázka, musíte si jej přizpůsobit svým potřebám ...
UPRAVIT
Pro AIR:
V prostředí AIR nepotřebujeme objekt FileReference, místo toho používáme Soubor a FileStream objekt pro uložení dat :
// for example, our local file will be saved in the same dir of our AIR app
var file:File = new File( File.applicationDirectory.resolvePath('local.data').nativePath ),
remote_data_url:String = 'http://www.example.com/data.php',
data_url:String = remote_data_url,
url_request:URLRequest,
url_loader:URLLoader,
connected:Boolean = true;
if(!connected){
// if we are not connected, we use the path of the local file
data_url = file.nativePath;
}
load_data();
function load_data(): void {
url_request = new URLRequest(data_url);
url_loader = new URLLoader();
url_loader.addEventListener(Event.COMPLETE, on_data_loaded);
url_loader.load(url_request);
}
function on_data_loaded(e:Event): void {
var data:String = e.target.data;
if(connected){
// save data to the local file
var file_stream:FileStream = new FileStream();
file_stream.open(file, FileMode.WRITE);
file_stream.writeUTFBytes(data);
file_stream.close();
}
trace(data);
}
Doufám, že to pomůže.