जावास्क्रिप्ट के साथ फ़ोल्डर में फ़ाइल नाम की सूची प्राप्त करें


86

मेरी वेबसाइट /assets/photos/फ़ोल्डर से बहुत सारी तस्वीरें परोस रही है । मैं जावास्क्रिप्ट के साथ उस फ़ोल्डर में फ़ाइलों की सूची कैसे प्राप्त कर सकता हूं?


5
आपने क्या प्रयास किया है? और आप किस संदर्भ में फ़ाइलों की सूची प्राप्त करना चाहते हैं ... ब्राउज़र से या नोड के साथ सर्वर से।
— डेविड बार्कर

और आप किस ब्राउज़र का समर्थन कर रहे हैं?
— सिमपाल कुमार

@ यह केवल क्रोम के नवीनतम संस्करण के लिए है
— bevanb

@ मुझे संदेह है कि ब्राउज़र की पसंद वास्तव में मायने रखती है। जब तक सर्वर इसे प्रस्तुत नहीं करता है तब तक ब्राउज़र में फ़ाइलों की सूची तक पहुंच नहीं होती है।
— माइक जूल

@ मायके हां तुम सही हो। मैं IE के बारे में सोच रहा था ActiveXObjectक्लाइंट सिस्टम फाइल सिस्टम का उपयोग करने के लिए। तो मैंने पूछा।
— सिमपाल कुमार

जवाबों:


90

वर्तमान कोड एक फ़ोल्डर में सभी फ़ाइलों की एक सूची देगा, यह मानते हुए कि यह उस सर्वर की तरफ है जिसे आप सभी फ़ाइलों को सूचीबद्ध करना चाहते हैं:

var fs = require('fs');
var files = fs.readdirSync('/assets/photos/');

11
मेरा मतलब था कि क्लाइंट से फाइलों की एक सूची प्राप्त करना, क्षमा करना अधिक स्पष्ट नहीं था।
— बेवनब van

8
कहां से () की आवश्यकता है या परिभाषित किया गया है ??? आपका कोड "" की आवश्यकता है "को परिभाषित नहीं करता है" त्रुटि। क्या आपने अपने कोड का परीक्षण किया है? यदि हां, तो क्या आप 'आवश्यकता' का जिक्र करते हुए कुछ महत्वपूर्ण हिस्सा छोड़ गए हैं?
— अपोस्टोलोस

5
@Apostolos ओपी विवरण में नोट करता है, यह सर्वर-साइड कोड होना चाहिए। आप इसे एक ब्राउज़र में नहीं चला सकते। इस स्क्रिप्ट को Node.js के साथ चलाने से कोई त्रुटि नहीं होती है।
— Naltroc

2
यह एक अच्छा तरीका है लेकिन लगता है कि सीधे सवाल का जवाब नहीं है। सरल उत्तर है, ग्राहक पक्ष (ब्राउज़र) से जेएस में, सर्वर साइड पर एक फ़ोल्डर / निर्देशिका में फ़ाइलों की सूची प्राप्त करने का कोई सीधा तरीका नहीं है।
— अक्षय हिरेमथ

आवश्यकता () केवल नोडज के साथ समर्थित है
— डुलमीना

35

नहीं, जावास्क्रिप्ट का फाइल सिस्टम तक पहुंच नहीं है। सर्वर साइड जावास्क्रिप्ट एक पूरी अलग कहानी है, लेकिन मुझे लगता है कि आप इसका मतलब नहीं है।


11
यह अब सच नहीं है। फ़ाइल एपीआई एक चीज है।
— अतिमहत्वाकांक्षी

1
@ superluminary, उस API का उपयोग करके कोई ऐसा कैसे कर सकता है?
— 2540625

@jtheletter एपीआई सर्वर पर चल रहा है, इसलिए आप अपने सर्वर पर जो भी स्टैक चला रहे हैं उसका उपयोग करेंगे। यदि वह नोड है, तो यह fesreaddir होगा।
— सुपरलुमिनी

1
यदि आप कह रहे हैं कि एक पुस्तकालय का उपयोग किया जाना चाहिए, तो यह कहना बहुत समान नहीं है कि जावास्क्रिप्ट (वेनिला) की फाइल सिस्टम तक पहुंच है।
— 1540 पर 2540625

13

मैं एक फ़ाइल dir.php लिखता हूं

var files = <?php $out = array();
foreach (glob('file/*.html') as $filename) {
    $p = pathinfo($filename);
    $out[] = $p['filename'];
}
echo json_encode($out); ?>;

अपनी स्क्रिप्ट में जोड़ें:

<script src='dir.php'></script>

और फ़ाइलों का उपयोग करें [] सरणी


आप जावास्क्रिप्ट के साथ फ़ाइलों को [] कैसे कहते हैं?
— लेट्स


1
@ 2540625 यह php है, शुद्ध जावास्क्रिप्ट नहीं। बावजूद इसके आपको php की जरूरत है और यह लेखक के मुद्दे को हल नहीं करता है, यह अभी भी एक बहुत अच्छा समाधान है यदि आपके पास php है।
— windowsboy111

वैकल्पिक रूप से, यदि आप सभी फ़ाइलों को सूचीबद्ध करना चाहते हैं, तो *.*फ़ाइल एक्सटेंशन को संरक्षित करने के लिए स्कैंडिर का उपयोग करें या उपयोग करें,$out = scandir("."); echo json_encode($out);
— स्टारडस्ट

यह जावास्क्रिप्ट नहीं है
— scitronboy

10

क्लाइंट साइड फ़ाइलों के लिए, आपको उपयोगकर्ता की स्थानीय निर्देशिका में फ़ाइलों की सूची नहीं मिल सकती है।

यदि उपयोगकर्ता ने अपलोड की गई फ़ाइलें प्रदान की हैं, तो आप उन्हें अपने inputतत्व के माध्यम से एक्सेस कर सकते हैं ।

<input type="file" name="client-file" id="get-files" multiple />


<script>
var inp = document.getElementById("get-files");
// Access and handle the files 

for (i = 0; i < inp.files.length; i++) {
    let file = inp.files[i];
    // do things with file
}
</script>

4

निर्दिष्ट फ़ोल्डर में फ़ाइल नाम की सूची प्राप्त करने के लिए, आप इसका उपयोग कर सकते हैं:

fs.readdir(directory_path, callback_function)

यह एक सूची लौटाएगा जिसे आप साधारण सूची अनुक्रमण जैसे- file[0],file[1]आदि से पार्स कर सकते हैं ।


2

मैंने हर फ़ाइल के लिए एक विशेष निर्देशिका में एक अलग मार्ग बनाया। इसलिए, उस रास्ते पर जाने का मतलब उस फाइल को खोलना था।

function getroutes(list){
list.forEach(function(element) {
  app.get("/"+ element,  function(req, res) {
    res.sendFile(__dirname + "/public/extracted/" + element);
  });
});

मैंने इस फ़ंक्शन को निर्देशिका में फ़ाइल नाम की सूची को पास करने के लिए बुलाया __dirname/public/extractedऔर इसने प्रत्येक फ़ाइलनाम के लिए एक अलग मार्ग बनाया जिसे मैं सर्वर साइड पर प्रस्तुत करने में सक्षम था।


1

मैं एक निर्देशिका को पढ़ने और एक डिजिटल फोटो फ्रेम के हिस्से के रूप में छवि दिखाने के लिए फ़ायरफ़ॉक्स 69.0 (उबंटू पर) में निम्नलिखित (छीन-नीचे कोड) का उपयोग करता हूं। पृष्ठ HTML, CSS और जावास्क्रिप्ट में बनाया गया है, और यह उसी मशीन पर स्थित है जहां मैं ब्राउज़र चलाता हूं। चित्र एक ही मशीन पर भी स्थित हैं, इसलिए "बाहर" से कोई भी दृश्य नहीं है।

var directory = <path>;
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', directory, false); // false for synchronous request
xmlHttp.send(null);
var ret = xmlHttp.responseText;
var fileList = ret.split('\n');
for (i = 0; i < fileList.length; i++) {
    var fileinfo = fileList[i].split(' ');
    if (fileinfo[0] == '201:') {
        document.write(fileinfo[1] + "<br>");
        document.write('<img src=\"' + directory + fileinfo[1] + '\"/>');
    }
}

इसके लिए नीति security.fileuri.strict_origin_policyको अक्षम करना होगा। इसका मतलब है कि यह एक समाधान नहीं हो सकता है जिसका आप उपयोग करना चाहते हैं। मेरे मामले में मैंने इसे ठीक समझा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.