2009-12-14 33 views
10

के साथ स्थानीय फ़ाइलों तक पहुंचें इस साइट के अन्य उत्तरों के आधार पर, मुझे पहले से ही लगता है कि मुझे इस प्रश्न का उत्तर पता है, लेकिन, जैसा कि यह थोड़ा अलग है, मैं पूछना चाहता था।स्थानीय जावास्क्रिप्ट

क्या जावास्क्रिप्ट से स्थानीय फ़ाइलों तक पहुंचना संभव है जो मशीन पर स्थानीय रूप से चल रहा है (AKA, मेरा वेबसाइट पता फ़ाइल होगा: /// सी:/...)? या, क्या यह सैंडबॉक्स भी है?

मैं जो करने की कोशिश कर रहा हूं: मेरे पास एक स्टैंडअलोन कंप्यूटर है जो मैं चाहता हूं कि लोग जेएसओएन या एक्सएमएल फाइलों में स्थानीय फ़ोल्डर में ड्रॉप करने में सक्षम हों जो साइट के निर्माण में पढ़े जाते हैं और एकल उत्पन्न करने के लिए उपयोग किए जाते हैं वेब पृष्ठ। यदि जावास्क्रिप्ट समाधान संभव नहीं है, तो क्या आप कोई अन्य सुझाव दे सकते हैं?

धन्यवाद।

+1

आप क्यों नहीं बस यह कोशिश करते हैं और देखते हैं कि यह काम करता है नहीं है? – jdigital

उत्तर

5

एक वेबपृष्ठ उसी सर्वर पर किसी भी फ़ाइल को पढ़ सकता है जैसा कि इसे लोड किया गया था (यह जावास्क्रिप्ट की क्रॉस-साइट नीति है)। इसका मतलब है कि पृष्ठ फ़ाइल: /// सी: /mywebsite/index.html फ़ाइल फ़ाइल को पढ़ सकता है: // सी: /somedir/somefile.xml। इस फ़ाइल को पढ़ने के लिए, या तो AJAX का उपयोग करें, इसे iFrame में लोड करें या इसे जावास्क्रिप्ट या सीएसएस फ़ाइल के रूप में लोड करें।

कई ब्राउज़र स्थानीय फ़ाइल (और अन्य रोचक चीजें) लोड करने के लिए कस्टम तरीकों का समर्थन करते हैं, आईई में ActiveX और फ़ायरफ़ॉक्स में XPCOM है।

+0

आपकी पोस्ट से, मुझे लगता है कि फाइलों में पढ़ने के लिए कोई" सामान्य "तरीका नहीं है? (यहां तक ​​कि फ्लैश जैसे प्लग-इन का उपयोग करना भी?) – JasCav

0

यदि लोग किसी फ़ोल्डर में एक जेसन स्ट्रिंग ड्रॉप करना चाहते हैं, तो आप इसे एक सादा पाठ फ़ाइल बना सकते हैं, फिर फ़ाइल नाम पर एक AJAX कॉल का उपयोग करें, जैसे कि आप इसे php/asp स्क्रिप्ट पर इंगित करेंगे । बैकएंड होने से पहले मैं पृष्ठों के परीक्षण के लिए यह हर समय करता हूं।

आईई। यदि आपका पृष्ठ सी: \ foo \ index.html था, तो आप उन्हें C: \ foo \ putyourstuff \ json.txt पर छोड़ सकते हैं और एक AJAX कॉल "putyourstuffhere/json.txt" चला सकते हैं।

1

यदि उपयोगकर्ता उन फ़ाइलों तक पहुँचने के लिए अपने वेबपेज अनुमति देता है, और यदि वे वेबपेज के रूप में एक ही मशीन पर स्थित हैं, तो प्राप्त करने से रोकने के लिए कुछ भी नहीं पर फ़ाइलों को केवल पढ़ने की पहुंच है जावास्क्रिप्ट के माध्यम से मशीन।

0

आप केवल एक अजाक्स अनुरोध का उपयोग कर फ़ाइलों को पढ़ सकते हैं, भले ही यह सर्वर के लिए था। लेकिन आपको फ़ाइल का नाम जानना है, और आप फाइलें नहीं लिख सकते हैं।

-5

हां, हालांकि असुरक्षित है, तो आप उपयोग कर सकते हैं:

fopen("c:\\MyFile.txt", 'r'); 
+0

आप कौन सा ब्राउज़र उस कोड को चला सकते हैं? – Marius

+2

क्षमा करें, यह एक मानक कार्य नहीं है, मैंने एक कस्टम फ़ंक्शन "फॉपेन" का उपयोग किया है जो कि काफी लंबा है, क्षमा चाहता है। http://phpjs.org/functions/fopen:774 – jbnunn

-4

आप SSJS का इतना PHP, Perl, JSP या किसी न किसी रूप सर्वर साइड पटकथा भाषा किसी प्रकार का विचार करना चाहिए।

0

यदि आप किसी HTML पृष्ठ (.htm/.html) के बजाय हाइपरटेक्स्ट एप्लिकेशन पेज (.hta) बनाते हैं, तो आपके पास FileSystemObject ऑब्जेक्ट का उपयोग करके फ़ाइल सिस्टम तक पूर्ण पहुंच है। कुछ

(ठीक है, ब्राउज़र चल रहा है कि निश्चित रूप से, उपयोगकर्ता खाते की फ़ाइल पहुँच द्वारा सीमित।)

+4

यह ध्यान रखना महत्वपूर्ण है कि एचटीए एक महान आवेदन हो सकता है, यह एक एमएस तकनीक भी है और विंडोज/आईई – Josh

+0

तक सीमित है ... कहा जा रहा है आप जानते हैं कि आप कभी भी विंडोज/आईई पर इसका उपयोग करने जा रहे हैं तो एचटीए शायद वास्तव में एक अच्छा विकल्प है। – Josh

2

यह केवल IE पर काम करेंगे, लेकिन अगर है कि आप के लिए एक समस्या नहीं है, यहाँ है नमूना कोड को एक फ़ाइल में लिखने के लिए:

var fso, s; 
    fso = new ActiveXObject("Scripting.FileSystemObject"); 
    s = fso.OpenTextFile("c:\\path\\to\\myfile.txt" , 8, 1, -2); 
    s.writeline("Hello World"); 
    s.Close(); 

और फिर यह से पढ़ने के लिए:

f = fso.OpenTextFile(filename, ForReading); 
while (!f.AtEndOfStream) { 
    var r = f.ReadLine(); 
    document.write (r + "<br />"); 
} 
f.Close(); 

OpenTextFile के बारे में अधिक जानकारी के लिए देखें: http://msdn.microsoft.com/en-us/library/314cz14s(VS.85).aspx

+0

इससे मुझे मदद मिली है। बहुत बहुत धन्यवाद: ") – ameliapond

5

the Firefox documentation के अनुसार, निम्नलिखित कोड काम करेगा:

var req = new XMLHttpRequest(); 
req.open('GET', 'file:///home/user/file.json', false); 
req.send(null); 
if(req.status == 0) 
    dump(req.responseText); 

मुझे याद करने के लिए यह केवल HTML पृष्ठ के रूप में ही निर्देशिका के भीतर काम करता लगते हैं। और मुझे नहीं पता कि यह अन्य ब्राउज़रों में काम करेगा या नहीं।

0

यह फ़ायरफ़ॉक्स में मेरे लिए काम किया ... इस साइट से

अनुकूलित कोड: http://www.h-online.com/security/services/Firefox-Mozilla-Demo-Reading-local-files-via-local-HTML-files-761851.html

<HTML> 

<BODY onLoad="ReadFileContent()" > 

<iframe id="local_file" name="local_file" 
    src="file:///C:/test.txt" 
    height=0 width=0> 
</iframe> 

<script> 

function ReadFileContent(){ 

alert(local_file.document.firstChild.innerHTML); 

} 

</script> 

<h2>Read Local File</h2> 

<P> 
If a window displays the content of your local file C:\test.txt 
the demo worked. If no additional window appears, it failed. You can 
close this window now.</p> 

</body> 

</html> 
संबंधित मुद्दे