2010-03-04 10 views
30

मैंने किसी वेबपृष्ठ द्वारा क्लाइंट मशीन पर फ़ाइलों तक पहुंच के संबंध में कुछ पोस्ट देखी हैं, अर्थात् यह questionक्या एचटीएमएल 5 आपको ब्राउज़र के भीतर स्थानीय क्लाइंट फाइलों से बातचीत करने की अनुमति देता है

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

पिछले प्रश्न में दिए गए उत्तरों में से एक Google गियर्स का उल्लेख करता है लेकिन तब से इसे HTML5 के पक्ष में बंद कर दिया गया है। एचटीएमएल 5 के भीतर एक क्लाइंट निर्देशिका तक पहुंच है? कैसे?

मुझे पता है कि किसी भी वेबपृष्ठ द्वारा स्थानीय फाइलों तक पहुंच क्यों एक सुरक्षा जोखिम है, लेकिन मेरे उद्देश्य के लिए मुझे उपयोगकर्ता को उचित अनुमतियों के लिए पूछने में कोई समस्या नहीं है।

+0

तुम कैसे अंत में इस के साथ चली गई अलावा अन्य कोई नहीं द्वारा किया जाता है? मैं पूर्ण फ़ाइल सिस्टम एक्सेस के साथ ब्राउज़र ऐप्स पर एक ही विश्लेषण कर रहा हूं। धन्यवाद – Dave

उत्तर

30

नहीं, कम से कम नहीं। हालांकि, आपके पास यहां कई विकल्प हैं।

वर्तमान में अपने सबसे अच्छे विकल्प हैं:

  • खींचें और डेस्कटॉप से ​​फ़ाइलों को छोड़, a tutorial देखते हैं।
  • इनपुट प्रकार फ़ाइल का उपयोग करें।
    • फ़ाइल एपीआई के साथ सामग्री पढ़ें या फॉर्म जमा करें। फ़ाइल को गतिशील रूप से पढ़ने के बारे में Mozilla Developer Center पर और पढ़ें।
    • आप multiple विशेषता को अलग-अलग फ़ील्ड रखने के बिना एक साथ कई फ़ाइलों को पढ़ने और खोलने के लिए निर्दिष्ट कर सकते हैं।
    • फ़ाइल खोलने के संवाद को खोलने के लिए आपके पास एक अदृश्य इनपुट हो सकता है और "एक क्लिक ट्रिगर" हो सकता है। विवरण के लिए पिछले मोज़िला डेवलपर केंद्र लिंक देखें।
  • FileSystem API का उपयोग करें जो आपको फ़ाइल सिस्टम पर फ़ाइलों को बनाने, हटाने, पढ़ने, संशोधित करने की अनुमति देता है। नोट: आपको काम करने के लिए एक सैंडबॉक्स वाली निर्देशिका मिलती है, आप इस तरह की पूरी प्रणाली तक नहीं पहुंच सकते हैं।
  • संपूर्ण फ़ाइल सिस्टम तक पहुंचने के लिए signed applets के साथ जावा का उपयोग करें। इसके लिए उपयोगकर्ता को हस्ताक्षर स्वीकार करने की आवश्यकता है।
+0

हाय काई, क्या आप जानते हैं कि आपका उपरोक्त कथन है कि एचटीएमएल 5 पूर्ण फ़ाइल सिस्टम एक्सेस की अनुमति नहीं देता है अभी भी सच है? ब्राउज़र में या ब्राउज़र फ़ाइल सिस्टम पहुंच के बाहर एक अच्छा समाधान खोजने का प्रयास कर रहा है। आदर्श रूप से समाधान एचटीएमएल 5/सिल्वरलाइट/एडोब एयर जैसे वेब देव प्रौद्योगिकियों का उपयोग करेगा। धन्यवाद, डेव – Dave

+1

@ डेव: अभी तक (10 फरवरी 2011) और निकट भविष्य में, एचटीएमएल 5 उपयोगकर्ता के फाइल सिस्टम को सीधे पढ़ने/लिखने की पहुंच प्रदान नहीं करेगा।क्रोम में कुछ spec'd और कार्यान्वित किया गया है (http://dev.w3.org/2009/dap/file-system/pub/FileSystem/), लेकिन यह केवल आपको सैंडबॉक्स वाली निर्देशिका में क्रियाओं को चलाने की सुविधा देता है बाहरी फाइलें मुझे लगता है कि यदि आप पहली बार एप्लेट पर हस्ताक्षर करते हैं तो जावा पर सिस्टम की किसी भी फाइल को लिखने/पढ़ने की अनुमति देने वाली सबसे बड़ी शक्ति है। उपयोगकर्ता को हस्ताक्षर पर विश्वास करने के लिए स्पष्ट रूप से पूछा जाएगा। – Tower

+0

अप्रैल 2014 में, सार्वजनिक-वेबपैप्स पर इसकी घोषणा की गई थी कि अन्य ब्राउज़र द्वारा फाइल सिस्टम एपीआई स्पेक पर विचार नहीं किया जा रहा है। अभी के लिए, एपीआई क्रोम-विशिष्ट है और अन्य ब्राउज़रों द्वारा इसे लागू करने की संभावना नहीं है और अब डब्ल्यू 3 सी के साथ मानकीकृत नहीं किया जा रहा है। src: http://www.html5rocks.com/en/tutorials/file/filesystem/ –

0

जैसा कि पहले उल्लेख, FileSystem और File एपीआई, FileWriter एपीआई के साथ समर्थन करेंगे, ब्राउज़र टैब के संदर्भ से पढ़ सकते हैं और फ़ाइलें लिखने के लिए इस्तेमाल किया जा सकता/एक क्लाइंट मशीन के लिए खिड़की।

वहाँ कई FileSystem और FileWriter एपीआई जो आप जिनमें से कुछ उल्लेख किया गया था, के बारे में पता होना चाहिए से संबंधित बातें हैं, लेकिन दोहरा लायक हैं:

APIs के
  • क्रियान्वयन वर्तमान में मौजूद क्रोमियम आधारित ब्राउज़रों (क्रोम & ओपेरा)
  • एपीआई के दोनों W3C मानकों के से हटा लिया गया 24 अप्रैल, 2014 को ट्रैक करते हैं और अब तक मालिकाना हैं भविष्य में लागू करने ब्राउज़र से (अब मालिकाना) APIs के
  • निकालना एक संभावना
  • है
  • एक सैंडबॉक्स (डिस्क जिनमें से बाहर फ़ाइलों को कोई प्रभाव नहीं उत्पादन कर सकते हैं पर एक स्थान) एपीआई के साथ बनाया फ़ाइलों को स्टोर करने के लिए इस्तेमाल किया जाता है
  • एक आभासी फाइल सिस्टम (एक निर्देशिका संरचना जो जरूरी डिस्क पर मौजूद नहीं है एक ही रूप है कि यह करता है जब ब्राउज़र से एक्सेस) प्रयोग किया जाता है में एपीआई

यहाँ के साथ बनाई गई फ़ाइलों का प्रतिनिधित्व इन कार्यों को मिलकर,, कैसे एपीआई उपयोग किया जाता है की सरल उदाहरण हैं सीधे और परोक्ष रूप :

BakedGoods *

लिखें फ़ाइल:

bakedGoods.set({ 
    data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}], 
    storageTypes: ["fileSystem"], 
    options: {fileSystem:{storageType: Window.PERSISTENT}}, 
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){} 
}); 

पढ़ें फ़ाइल:

bakedGoods.get({ 
     data: ["testFile"], 
     storageTypes: ["fileSystem"], 
     options: {fileSystem:{storageType: Window.PERSISTENT}}, 
     complete: function(resultDataObj, byStorageTypeErrorObj){} 
}); 

कच्चे फ़ाइल, FileWriter का उपयोग करना, और फ़ाइल सिस्टम API

लिखें फ़ाइल:

function onQuotaRequestSuccess(grantedQuota) 
{ 

    function saveFile(directoryEntry) 
    { 

     function createFileWriter(fileEntry) 
     { 

      function write(fileWriter) 
      { 
       var dataBlob = new Blob(["Hello world!"], {type: "text/plain"}); 
       fileWriter.write(dataBlob);    
      } 

      fileEntry.createWriter(write); 
     } 

     directoryEntry.getFile(
      "testFile", 
      {create: true, exclusive: true}, 
      createFileWriter 
     ); 
    } 

    requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile); 
} 

var desiredQuota = 1024 * 1024 * 1024; 
var quotaManagementObj = navigator.webkitPersistentStorage; 
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess); 

पढ़ें फ़ाइल:

function onQuotaRequestSuccess(grantedQuota) 
{ 

    function getfile(directoryEntry) 
    { 

     function readFile(fileEntry) 
     { 

      function read(file) 
      { 
       var fileReader = new FileReader(); 

       fileReader.onload = function(){var fileData = fileReader.result}; 
       fileReader.readAsText(file);    
      } 

      fileEntry.file(read); 
     } 

     directoryEntry.getFile(
      "testFile", 
      {create: false}, 
      readFile 
     ); 
    } 

    requestFileSystem(Window.PERSISTENT, grantedQuota, getFile); 
} 

var desiredQuota = 1024 * 1024 * 1024; 
var quotaManagementObj = navigator.webkitPersistentStorage; 
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess); 

वर्तमान स्थितियों FileSystem और FileWriter एपीआई को देखते हुए, उनके उपयोग पढ़ सकते हैं और फ़ाइलें लिखने के लिए वर्तमान में उन कार्यों को करने के लिए एक "एचटीएमएल 5 रास्ता" का गठन नहीं है।

गैर-कार्यान्वयन ब्राउज़र विक्रेताओं से एपीआई में नवीनीकृत रुचि उन्हें मानकों के ट्रैक पर वापस रख सकती है, हालांकि। यह, क्रोमियम आधारित ब्राउज़र के उच्च बाजार प्रवेश के साथ संयुक्त है और तथ्य यह है कि Google (क्रोमियम के मुख्य योगदानकर्ता) ने एपीआई को दी गई और जीवन की समाप्ति तिथि कुछ मामलों में उनके उपयोग को उचित ठहराने के लिए पर्याप्त नहीं होनी चाहिए।

* BakedGoods इस आदमी यहीं :)

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

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