জাভাস্ক্রিপ্ট সহ ফোল্ডারে ফাইলের নামের তালিকা পান


87

আমার ওয়েবসাইট /assets/photos/ফোল্ডার থেকে প্রচুর ছবি পরিবেশন করছে । আমি কীভাবে জাভাস্ক্রিপ্ট দিয়ে সেই ফোল্ডারে থাকা ফাইলগুলির একটি তালিকা পেতে পারি?


4
আপনি কি চেষ্টা করেছেন? এবং কোন প্রসঙ্গে আপনি ফাইলগুলির তালিকা পুনরুদ্ধার করতে চান ... ব্রাউজার থেকে বা নোড.জেএস সহ কোনও সার্ভার থেকে?
ডেভিড বার্কার 16

এবং আপনি কোন ব্রাউজারকে সমর্থন করছেন?
সিম্পল কুমার

@ মাইক এটি কেবলমাত্র ক্রোমের সর্বশেষতম সংস্করণটির জন্য
16

@ মাইকে আমি সন্দেহ করি যে ব্রাউজার পছন্দটি সত্যই গুরুত্বপূর্ণ। ব্রাউজারটি ফাইলের তালিকায় অ্যাক্সেস পায় না যতক্ষণ না সার্ভার এটি উপস্থাপন করে।
মাইক ক্লক

@ মাইকসি ইয়া আপনি ঠিক বলেছেন। আমি ActiveXObjectক্লায়েন্ট সিস্টেম ফাইল সিস্টেম অ্যাক্সেস করতে IE সম্পর্কে ভাবছিলাম । এজন্য আমি জিজ্ঞাসা করলাম.
সিম্পল কুমার

উত্তর:


90

বর্তমান কোডটি কোনও ফোল্ডারে সমস্ত ফাইলের একটি তালিকা দেবে, ধরে নিলে এটি সার্ভারের পাশে রয়েছে যা আপনি সমস্ত ফাইল তালিকাভুক্ত করতে চান:

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

11
আমি ক্লায়েন্টের কাছ থেকে ফাইলগুলির একটি তালিকা অ্যাক্সেস করতে চাইছিলাম, দুঃখিতটি আরও পরিষ্কার ছিল না।
bevanb

8
প্রয়োজন () কোথা থেকে আসে বা সংজ্ঞায়িত হয় ??? আপনার কোডটি "ত্রুটি" "" প্রয়োজনীয় "সংজ্ঞায়িত করা হয় না id আপনি কি আপনার কোড পরীক্ষা করেছেন? যদি তা হয়, তবে আপনি সম্ভবত 'প্রয়োজনীয়তা' উল্লেখ করে কিছু গুরুত্বপূর্ণ অংশ মিস করেছেন?
অ্যাপস্টোলোস

4
@ অ্যাপোস্টোলোস বিবরণে ওপি নোট হিসাবে, এটি সার্ভার-সাইড কোড হওয়া দরকার। আপনি এটি ব্রাউজারে চালাতে পারবেন না। নোড.জেএস দিয়ে এই স্ক্রিপ্টটি চালানো কোনও ত্রুটি ফেলে না not
নল্ট্রোক

4
এটি একটি ভাল উপায় তবে মনে হয় সরাসরি প্রশ্নের উত্তর দেয় না। এর সহজ উত্তর হ'ল না, ক্লায়েন্টের পাশ (ব্রাউজার) থেকে জেএসে সার্ভারের পাশের কোনও ফোল্ডার / ডিরেক্টরিতে ফাইলের তালিকা পাওয়ার সরাসরি কোনও উপায় নেই।
অক্ষয় হীরামথ

প্রয়োজনীয় () কেবলমাত্র নোডেজের সাহায্যে সমর্থিত
ডুলমিনা

35

না, জাভাস্ক্রিপ্টের ফাইল সিস্টেমে অ্যাক্সেস নেই। সার্ভার সাইড জাভাস্ক্রিপ্ট সম্পূর্ণ ভিন্ন গল্প তবে আমি অনুমান করি আপনি এর অর্থ এটি করেন নি।


11
এটি আর সত্য নয়। ফাইল এপিআই একটি জিনিস।
সুপারলুমিনিয়ার

4
@ সুপারলুমাইনারি, তখন সেই এপিআই ব্যবহার করে কেউ কীভাবে এটি করতে পারে?
2540625

@jtheletter API টি সার্ভারে চলছে, সুতরাং আপনি আপনার সার্ভারে যে স্ট্যাক চালাচ্ছেন তা ব্যবহার করবেন। যদি এটি নোড হয় তবে এটি fs.readdir হবে।
সুপারলুমিনিয়ার

4
আপনি যদি বলছেন যে কোনও লাইব্রেরি অবশ্যই ব্যবহার করা উচিত তবে এটি জাভাস্ক্রিপ্টের (ভ্যানিলা) ফাইল সিস্টেমে অ্যাক্সেস রয়েছে বলে ঠিক মত নয়।
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>

এবং ফাইলগুলি [] অ্যারে ব্যবহার করুন


আপনি কীভাবে জাভাস্ক্রিপ্ট সহ ফাইলগুলি [var] কল / ব্যবহার করবেন?
লেথস

4
আনকাচড সিনট্যাক্স এরিয়ার: অপ্রত্যাশিত টোকেন '<'
2540625

4
@ 2540625 এটি পিএইচপি, খাঁটি জাভাস্ক্রিপ্ট নয়। আপনার পিএইচপি প্রয়োজন সত্ত্বেও এটি লেখকের সমস্যা সমাধান করে না, পিএইচপি থাকলেও এটি একটি দুর্দান্ত সমাধান হতে পারে।
উইন্ডোজবয় 111

বিকল্পভাবে আপনি যদি সমস্ত ফাইল *.*তালিকাবদ্ধ করতে চান, হয় ফাইল এক্সটেনশনগুলি সংরক্ষণের জন্য স্ক্যান্ডির ব্যবহার করুন বা ব্যবহার করুন$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]ইত্যাদির মাধ্যমে পার্স করতে পারেন ইত্যাদি etc.


2

আমি একটি নির্দিষ্ট ডিরেক্টরিতে প্রতিটি ফাইলের জন্য আলাদা রুট তৈরি করেছি। সুতরাং, সেই পথে যাওয়ার অর্থ সেই ফাইলটি খোলার।

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

আমি এই ফাংশনটিকে ডিরেক্টরিতে ফাইলের নামের তালিকাটি পাস বলেছি __dirname/public/extractedএবং এটি প্রতিটি ফাইলের জন্য একটি পৃথক রুট তৈরি করেছে যা আমি সার্ভারের পাশে রেন্ডার করতে সক্ষম হয়েছি।


1

আমি ডিরেক্টরি পড়তে এবং ডিজিটাল ফটো ফ্রেমের অংশ হিসাবে চিত্রটি দেখানোর জন্য ফায়ারফক্স .0৯.০ (উবুন্টুতে) -এ নিম্নলিখিত (স্ট্রিপড ডাউন কোড) ব্যবহার করি use পৃষ্ঠাটি এইচটিএমএল, সিএসএস এবং জাভাস্ক্রিপ্টে তৈরি করা হয়েছে এবং এটি একই মেশিনে অবস্থিত যেখানে আমি ব্রাউজারটি চালাই। চিত্রগুলি একই মেশিনেও অবস্থিত, তাই "বাইরে" থেকে কোনও ভিউ নেই।

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অক্ষম করা দরকার। এর অর্থ এটি আপনি ব্যবহার করতে চান এমন কোনও সমাধান হতে পারে না। আমার ক্ষেত্রে আমি এটি ঠিক বলে মনে করেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.