फ़्लैश के लिए:
फ्लैश के साथ स्थानीय रूप से डेटा को बचाने के लिए, आप 3 तरीकों में से एक का उपयोग कर सकते हैं:फ्लैश प्लेयर कैश, एक SharedObject , या एक FileReference वस्तु। और अपनी स्थानीय फ़ाइल के लिए, PHP और MySQL को भूल जाइए क्योंकि हम केवल उस डेटा के बारे में बात कर रहे हैं जो आपको मिला है (json, xml, txt,...)।
- फ्लैश प्लेयर कैश :
आपको पता होना चाहिए कि डिफ़ॉल्ट रूप से, फ़्लैश प्लेयर आपकी फ़ाइल की एक स्थानीय प्रति उसके कैशे में रखता है। आप इस स्थानीय प्रतिलिपि को अपने डेटा के ऑफ़लाइन स्रोत के रूप में उपयोग कर सकते हैं, लेकिन यहां यह न भूलें कि फ़्लैश प्लेयर ने आपकी दूरस्थ फ़ाइल के अंतिम संस्करण को सहेजा नहीं है, लेकिन पहले वाला और वह http://www.example.com/data.php http://www.example.com/data.php?123 भले ही यह वही फाइल हो! इसके बारे में अधिक जानकारी के लिए, इस प्रश्न का मेरा उत्तर पर एक नज़र डालें। .
- SharedObject :
मुझे आपके लोड किए गए डेटा का आकार नहीं पता, लेकिन जैसा कि Adobe ने SharedObject के बारे में कहा था:
मुझे लगता है कि इसका उपयोग बड़ी फाइलों के लिए नहीं किया जाता है और फाइलों को स्टोर करने की अनुशंसा नहीं की जाती है लेकिन कुछ साधारण डेटा। बेशक, ब्राउज़र के लिए एक कुकी के रूप में, SharedOject को हार्ड ड्राइव पर डेटा लिखने के लिए उपयोगकर्ता के प्राधिकरण की आवश्यकता होती है, और उपयोगकर्ता इसे किसी भी समय हटा सकता है।
- FileReference :
मुझे लगता है कि आप जो खोज रहे हैं उसे करने का यह सबसे अच्छा तरीका है। आपको पता होना चाहिए कि FileReference का उपयोग करके किसी फ़ाइल को सहेजने के लिए, आपके उपयोगकर्ता को डेटा सहेजने और उसे दूसरी बार पढ़ने के लिए फ़ाइल का चयन करने के लिए आमंत्रित किया जाता है। इसलिए यदि आप नहीं चाहते कि आपके एप्लिकेशन के साथ कोई उपयोगकर्ता इंटरेक्शन करे, तो इस तरीके को भूल जाएं।
उदाहरण का उपयोग करते हुए फ़ाइल संदर्भ:
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();
}
यह कोड हर बार उपयोगकर्ता को एक सेव डायलॉग दिखाएगा, बेशक, यह सिर्फ एक नमूना है, आपको इसे अपनी आवश्यकताओं के अनुसार अनुकूलित करना होगा ...
संपादित करें
एआईआर के लिए:
AIR के साथ हमें FileReference ऑब्जेक्ट की आवश्यकता नहीं है, इसके बजाय हम फ़ाइल और एक FileStream डेटा बचाने के लिए आपत्ति:
// 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);
}
आशा है कि यह मदद कर सकता है।