2015-10-12 15 views
11

का उपयोग करके फ़ाइल को सार्वजनिक निर्देशिका में सहेजें, मुझे अपने मोबाइल डिवाइस पर फ़ाइलों को डाउनलोड करने और अन्य ऐप्स (एंड्रॉइड और आईओएस का उपयोग करके) के लिए सुलभ बनाने की आवश्यकता है।कॉर्डोवा फ़ाइल ट्रांस्फर

मैं एसडी कार्ड (cordova.file.externalDataDirectory) करने के लिए एक फ़ाइल डाउनलोड करने में कामयाब रहे, लेकिन यह केवल एंड्रॉयड पर मौजूद है और फिर भी मैं एक एसडी कार्ड होने हर डिवाइस पर भरोसा नहीं कर सकते।

जब मैं डिवाइस स्टोरेज (cordova.file.dataDirectory) पर डाउनलोड करता हूं, तो फ़ाइल मेरे ऐप के लिए निजी है और इसलिए अन्य ऐप्स के लिए पहुंच योग्य नहीं है। फ़ाइल InAppBrowser में खोली जा सकती है, लेकिन मैं संबंधित डिफ़ॉल्ट ऐप का उपयोग करना पसंद करूंगा।

क्या सभी उपकरणों पर सार्वजनिक रूप से उपलब्ध निर्देशिका के लिए पथ प्राप्त करने का कोई तरीका है?

रास्तों समाधान द्वारा दिया https://stackoverflow.com/a/21375812/3432305 में सुझाव दिया Android पर दोनों निजी रहे हैं ...

संपादित करें:

मुझे लगता है कि तो यह स्पष्ट है कि मैं क्या कोशिश कर रहा हूँ मैं अपने उपयोग के मामले का वर्णन करना चाहिए प्राप्त करने के लिए: मैं संबंधित डिफ़ॉल्ट ऐप (पीडीएफ दर्शक, छवि दर्शक इत्यादि) का उपयोग करके ऐप चैट में अपने से फ़ाइलें खोलना चाहता हूं। चूंकि Cordova File Opener plugin केवल स्थानीय फ़ाइल सिस्टम से फ़ाइलों को स्वीकार करता है, इसलिए मुझे पहले उन्हें सहेजने की आवश्यकता है। लेकिन उन्हें बाद में मेरे ऐप के बाहर से पहुंचने की आवश्यकता नहीं है ...

उत्तर

14

एंड्रॉइड पर, बाह्य भंडारण निर्देशिका हमेशा मौजूद है; अगर डिवाइस में भौतिक एसडी कार्ड नहीं है, तो एंड्रॉइड इसे अनुकरण करेगा। देखें getExternalStorageDirectory:

नोट: यहां "बाहरी" शब्द से भ्रमित न हों। यह निर्देशिका बेहतर मीडिया/साझा स्टोरेज के रूप में सोचा जा सकता है। यह एक फाइल सिस्टम है कि अपेक्षाकृत बड़ी मात्रा में डेटा रख सकता है और इसे में सभी एप्लिकेशन (अनुमतियों को लागू नहीं करता है) में साझा किया जाता है। परंपरागत रूप से यह एक एसडी कार्ड है, लेकिन इसे डिवाइस में अंतर्निहित स्टोरेज के रूप में भी कार्यान्वित किया जा सकता है जो संरक्षित आंतरिक भंडारण से अलग है और कंप्यूटर पर फाइल सिस्टम के रूप में आरोहित किया जा सकता है।

इसलिए cordova.file.externalDataDirectory हमेशा हल हो जाएगा। हालांकि, ऐप्स के बीच डेटा साझा करने के लिए, शायद आप cordova.file.externalRootDirectory - बाहरी संग्रहण (एसडी कार्ड) रूट का उपयोग करना चाहते हैं। cordova-plugin-file देखें।

इस तरह आप किसी ऐसे स्थान पर फ़ाइलों को स्टोर कर सकते हैं जो किसी अन्य ऐप से एक्सेस करना आसान हो। /sdcard/my_shared_data/

iOS पर, यह फ़ाइलों को साझा करने और अधिक कठिन है, क्योंकि क्षुधा जानबूझकर एक दूसरे से सुरक्षा नीति की वजह से, एप्पल के Inter-App Communication Guide के रूप में अलग कर रहे हैं का कहना है:

Apps का एक उपकरण पर अन्य एप्लिकेशन के साथ ही परोक्ष रूप से संवाद

आईओएस पर आप सबसे अच्छा शर्त डेटा को iCloud के माध्यम से सिंक करके साझा करना है।iCloud डिजाइन गाइड, जो कहते हैं में खंड Configuring a Common Ubiquity Container for Multiple Apps देखें:

... शायद आप कि interoperate और एक दूसरे की फ़ाइलों को पहुंच की आवश्यकता है दो क्षुधा प्रदान करते हैं। इन दोनों उदाहरणों में, आप एक सामान्य सर्वव्यापी कंटेनर निर्दिष्ट करके आवश्यक पहुंच प्राप्त करते हैं और फिर प्रत्येक ऐप से इसकी पहुंच का अनुरोध करते हैं।

+0

हाय, आपके जवाब के लिए thx! इससे कम से कम एंड्रॉइड के लिए मेरी समस्याएं हल हो जाती हैं :) मैंने अपनी समस्या का वर्णन करने के लिए अपना प्रश्न संपादित किया। क्या आप कृपया जांच सकते हैं कि आईओएस के लिए कुछ भी बदलता है या नहीं? ICloud के संबंध में, आपके द्वारा प्रदान किया गया लिंक कहता है कि "कैश, अस्थायी या बड़ी डाउनलोड की गई डेटा फ़ाइलों" को स्टोर नहीं करना है, इसलिए मैं इसका उपयोग नहीं करना चाहूंगा ... इसके अलावा, मैं एक हाइब्रिड ऐप विकसित कर रहा हूं, इसलिए मैं थोड़ा सा हूं कॉर्डोवा प्लगइन्स प्रदान करने वाले विकल्पों तक ही सीमित है .. लेकिन मुझे लगता है कि यह एक बहुत ही सामान्य उपयोग केस है, इसलिए आईओएस के लिए भी एक आसान समाधान होना चाहिए .. – kolli

+2

डिफ़ॉल्ट एप्लिकेशन में फ़ाइल खोलना विशिष्ट ऐप्स के बीच फ़ाइलों को साझा करने से बिल्कुल अलग है , और बहुत आसान है। [कॉर्डोवा-प्लगइन-फ़ाइल-ओपनर 2] (https://github.com/pwlin/cordova-plugin-file-opener2) ठीक उसी तरह करेगा जैसा आपको आईओएस और एंड्रॉइड की आवश्यकता है। प्रत्येक प्लेटफ़ॉर्म के लिए फ़ाइलों को सहेजने के लिए बस उदाहरणों का पालन करें, और यदि आपको कोई समस्या है तो प्लगइन गिथब पेज पर कोई समस्या पोस्ट करें। – DaveAlden

+0

मुझे यह भी लगा कि यह एक आसान काम होना चाहिए .. फिर भी, मुझे आईओएस के लिए एक अच्छा उदाहरण नहीं मिला। मैंने अब इसे 'cordova.file.applicationStorageDirectory' का उपयोग करके एक और प्रयास दिया है और ऐसा लगता है (हालांकि प्रलेखन कहता है कि यह केवल पढ़ने के लिए ...)। बाद में इसे 'cordova.file.cacheDirectory' का उपयोग करके फिर से प्रयास करें, लेकिन मुझे लगता है कि यह ठीक होना चाहिए। धन्यवाद! – kolli

संबंधित मुद्दे