জাভাস্ক্রিপ্ট সহ স্থানীয় ফাইল অ্যাক্সেস


177

স্থানীয় ফাইল ম্যানিপুলেশন যা জাভাস্ক্রিপ্ট দিয়ে সম্পন্ন হয়েছে? আমি একটি সমাধান যে প্রয়োজন মত আর ইনস্টল পদাঙ্ক সহযোগে এটি করা যাবে খুঁজছি অ্যাডোবি এয়ার

বিশেষত, আমি কোনও ফাইল থেকে বিষয়বস্তু পড়তে এবং সেই বিষয়বস্তুগুলিকে অন্য কোনও ফাইলে লিখতে চাই। এই মুহুর্তে আমি অনুমতি পাওয়ার বিষয়ে উদ্বিগ্ন নই এবং কেবল ধরে নিচ্ছি যে এই ফাইলগুলিতে আমার কাছে ইতিমধ্যে সম্পূর্ণ অনুমতি রয়েছে।


উত্তর:


87

যদি ব্যবহারকারী এর মাধ্যমে কোনও ফাইল নির্বাচন করে তবে আপনি ফাইল এপিআই ব্যবহার করে সেই ফাইলটি পড়তে এবং প্রক্রিয়া<input type="file"> করতে পারেন

ডিজাইনের মাধ্যমে সালিসী ফাইলগুলি পড়ার বা লেখার অনুমতি নেই। এটি স্যান্ডবক্সের লঙ্ঘন। উইকিপিডিয়া থেকে -> জাভাস্ক্রিপ্ট -> সুরক্ষা :

জাভাস্ক্রিপ্ট এবং ডোম দূষিত লেখকদের ওয়েবে ক্লায়েন্ট কম্পিউটারে চালানোর জন্য স্ক্রিপ্ট সরবরাহ করার সম্ভাবনা সরবরাহ করে। ব্রাউজার লেখকরা দুটি বিধিনিষেধ ব্যবহার করে এই ঝুঁকি নিয়ে থাকেন। প্রথমত, স্ক্রিপ্টগুলি একটি স্যান্ডবক্সে চালিত হয় যেখানে তারা কেবল ওয়েব-সম্পর্কিত ক্রিয়াকলাপ সম্পাদন করতে পারে, সাধারণ-উদ্দেশ্যমূলক প্রোগ্রামিংয়ের মতো কাজ নয় ফাইল তৈরির

2016 আপডেট : ফাইল সিস্টেম এপিআইয়ের মাধ্যমে সরাসরি ফাইল সিস্টেমের অ্যাক্সেস সম্ভব , যা কেবল ক্রোম এবং অপেরা দ্বারা সমর্থিত এবং অন্য ব্রাউজারগুলির দ্বারা প্রয়োগ করা হয়নি ( এজ ব্যতীত )। বিশদের জন্য কেভিনের উত্তর দেখুন


28
অভিশাপ। এটি অবশ্যই বোকামি। জাভাস্ক্রিপ্টটি সম্ভবত একটি অ্যাপ্লিকেশন-অজোনস্টিক স্ক্রিপ্টিং ভাষা। প্রতিটি অ্যাপ্লিকেশন একটি ওয়েব ব্রাউজার নয়। আমি এখানে এসেছি কারণ আমি ফটোশপ স্ক্রিপ্টিংয়ে আগ্রহী, উদাহরণস্বরূপ। এমনকি যদি কিছু অ্যাপ্লিকেশনগুলি ফাইল অ্যাক্সেস ক্লাস সরবরাহ না করে তবে সেগুলি যথাযথ যেখানে সেই অ্যাপ্লিকেশনগুলির জন্য তাদের মানক করে তোলে - এটি একটি মানক তবে alচ্ছিক বৈশিষ্ট্য, তাই সর্বজনীনভাবে প্রযোজ্য না হলেও একটি অ্যাপ্লিকেশন থেকে অভিজ্ঞতা স্থানান্তরযোগ্য। আমি ফটোশপে যা শিখি তা অন্য জাভাস্ক্রিপ্ট হোস্টগুলিতেও পোর্টেবল হবে না যা ফাইল অ্যাক্সেসের অনুমতি দেয়।
স্টিভ 314

27
ভাষা জাভাস্ক্রিপ্ট করুন এবং হোস্টিংয়ের পরিবেশ এটি করতে দেয় যা কিছু করুন। স্পাইডারমনকি অন্য যে কোনও ভাষা করতে পারে। ব্রাউজারে জাভাস্ক্রিপ্ট স্যান্ডবক্সযুক্ত।

35
এই উত্তরটি 3 বছর আগে সঠিক হতে পারে তবে এটি এখন আর সঠিক নয়। এইচটিএমএল 5 এ @ হার্স্ট ওয়ালটারের উত্তর দেখুন। বা এখানে যান: html5rocks.com/en/tutorials/file/dndfiles
james.garriss

@ জেমস.গরিস হ্যাঁ, আসলে এটি তিন বছর আগেও দুর্দান্ত ছিল না। এই পৃষ্ঠাটি আমাকে শিক্ষা কিভাবে পড়তে / ফায়ারফক্স 2003 ফিরে সঙ্গে লিখতে web.archive.org/web/20031229011919/http://www.captain.at/... (xpcom সঙ্গে XUL জন্য Bulit কিন্তু পাওয়া ব্রাউজারে) এবং মাইক্রোসফট ছিল 1990-এর দশকে Node.js ধাঁচের javscript শেল স্ক্রিপ্টিং (এবং FileIO জন্য ActiveX সঙ্গে ব্রাউজারে উপলব্ধ)
original_username

আর সম্ভব নয়
সিসড্রাগন

158

এইচটিএমএল 5 বৈশিষ্ট্যগুলির একটি আপডেট রয়েছে http://www.html5rocks.com/en/tutorials/file/dndfiles/ এ রয়েছে । এই দুর্দান্ত নিবন্ধটি জাভাস্ক্রিপ্টে স্থানীয় ফাইল অ্যাক্সেস সম্পর্কে বিশদভাবে ব্যাখ্যা করবে। উল্লিখিত নিবন্ধ থেকে সংক্ষিপ্তসার:

স্পেসিফিকেশনটি একটি 'স্থানীয়' ফাইল সিস্টেম থেকে ফাইল অ্যাক্সেসের জন্য কয়েকটি ইন্টারফেস সরবরাহ করে :

  1. ফাইল - একটি পৃথক ফাইল; নাম, ফাইলের আকার, মাইমির ধরণ এবং ফাইল হ্যান্ডেলের রেফারেন্সের মতো পঠনযোগ্য তথ্য সরবরাহ করে।
  2. ফাইললিস্ট - ফাইল অবজেক্টগুলির একটি অ্যারের মতো ক্রম। (মনে<input type="file" multiple> ডেস্কটপ থেকে ফাইলগুলির একটি ডিরেক্টরি বা টেনে আনুন)।
  3. ব্লব - বাইট রেঞ্জগুলিতে একটি ফাইল টুকরো করার অনুমতি দেয়।

পল ডি ওয়েটের মন্তব্য নীচে দেখুন।


7
আমাদের জাভা বা ফ্ল্যাশ প্লাগইন ব্যবহার করার মতো এটি ঠিক একটি সত্যিকারের ফাইল সিস্টেম নয় files উদাহরণস্বরূপ, আমরা ব্যবহারকারীদের ডেস্কটপে ফাইলগুলি তালিকাভুক্ত করতে পারি না যতক্ষণ না সে প্রথমে সেগুলি নিজে নির্বাচন করে।
পেসারিয়ার

9
দেখে মনে হচ্ছে এই API গুলি পরিত্যাগ করা হচ্ছে: w3.org/TR/file-writer-api এবং html5rocks.com/en/tutorials/file/files systemm দেখুন
পল ডি

4
দরকারী সতর্কতা ছিনিয়ে নেওয়ার জন্য ডাব্লু 3 সি এর ফর্মটি সেখানে যত্নবান। কেবলমাত্র ক্রোমে প্রয়োগ করা ফাইল সিস্টেম এপিআই এগিয়ে চলেছে না। ফাইল এপিআই, সার্বজনীন হয়েছে সমর্থন, হিসেবে গ্রহণ করা হয় W3C পরিশ্রমী খসড়া এবং আমরা আর এটা ছাড়া জীবন কল্পনা করতে পারেন। অবশ্যই আমরা এখনও একটি ব্রাউজারে রয়েছি এবং ব্যবহারকারী আমাদের ফাইল আনার আগ পর্যন্ত আমাদের অপেক্ষা করতে হবে, তবে এটি নাটকীয়ভাবে ওয়েব অ্যাপ্লিকেশনগুলির প্রসারকে প্রসারিত করে এবং শীঘ্রই খুব শীঘ্রই চলে যাচ্ছে না।
bbsimonbb

21

আপডেট আপডেট ফায়ারফক্স ১ox ( https://bugzilla.mozilla.org/show_bug.cgi?id=546848 দেখুন ) থেকে এই বৈশিষ্ট্যটি সরানো হয়েছে ।


ফায়ারফক্সে আপনি (প্রোগ্রামার) জাভাস্ক্রিপ্ট ফাইলের মধ্যে থেকে এটি করতে পারেন:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");

এবং আপনাকে (ব্রাউজার ব্যবহারকারী) অ্যাক্সেসের অনুমতি দেওয়ার জন্য অনুরোধ জানানো হবে। (ফায়ারফক্সের জন্য আপনাকে একবার ব্রাউজারটি শুরু করার পরে এটি করা দরকার)

যদি ব্রাউজার ব্যবহারকারী অন্য কেউ হয় তবে তাদের অনুমতি দিতে হবে।


6
এটি একটি ত্রুটি দেয় যে এটি
অবনতিহিত

4
যেমনটি এই লিঙ্কটি দেখায়, এই বৈশিষ্ট্যটি ফায়ারফক্সের পরবর্তী সংস্করণগুলিতে সরানো হয়েছে। সমর্থন.
mozilla.org/en-US/questions/944433

3
ওহ, যে স্তন্যপান। আমি সুরক্ষা এবং এগুলি সব পাই, তবে আমাদের নিজস্ব জাভাস্ক্রিপ্ট ফাইলগুলি স্থানীয়ভাবে চালানোর জন্য আমাদের বিশ্বাসের একটি উপায় প্রয়োজন।
জেসন এস

নিশ্চিত করুন। এবং আমি এটি করার আর কোনও উপায় খুঁজে পাইনি।
মাকান তায়েবী

2
এটি হ্রাস করা হয়েছে তা দয়া করে উত্তর আপডেট করুন। ধন্যবাদ।
jpaugh

20

পূর্বে উল্লিখিত হিসাবে, FileSystem এবং ফাইল API গুলি, সহ FileWriter এপিআই, একটি ক্লায়েন্ট মেশিনে একটি ব্রাউজার ট্যাব / উইন্ডো প্রেক্ষাপটে থেকে পড়তে ও লিখতে ফাইল ব্যবহার করা যাবে।

ফাইলসিস্টেম এবং ফাইল রাইটার এপিআই সম্পর্কিত বেশ কয়েকটি জিনিস রয়েছে যা সম্পর্কে আপনার সচেতন হওয়া উচিত, এর কয়েকটি উল্লেখ করা হয়েছিল তবে পুনরাবৃত্তি করার মতো:

  • এপিআইগুলির বাস্তবায়ন বর্তমানে কেবল ক্রোমিয়াম-ভিত্তিক ব্রাউজারগুলিতে (ক্রোম এবং অপেরা) রয়েছে
  • 24 এপ্রিল, 2014-এ দু'টি এপিআইই ডাব্লু 3 সি স্ট্যান্ডার্ড ট্র্যাক থেকে সরিয়ে নেওয়া হয়েছে এবং এখন পর্যন্ত মালিকানাধীন রয়েছে
  • ভবিষ্যতে প্রয়োগকারী ব্রাউজারগুলি থেকে (এখন মালিকানাধীন) এপিআইগুলি সরানো একটি সম্ভাবনা
  • একটি স্যান্ডবক্স (ডিস্কের একটি অবস্থান যার বাইরে ফাইলগুলি কোনও প্রভাব ফেলতে পারে না) এপিআই দিয়ে তৈরি ফাইলগুলি সংরক্ষণ করতে ব্যবহৃত হয়
  • একজন ভার্চুয়াল ফাইল সিস্টেম (একটি ডিরেক্টরি কাঠামো যা ব্রাউজারের মধ্যে থেকে অ্যাক্সেস করার সময় এটি একই রূপে ডিস্কে অগত্যা উপস্থিত থাকে না) ব্যবহৃত হয়, এটি API এর সাথে তৈরি ফাইলগুলি উপস্থাপন করে

এগুলি করার জন্য সরাসরি এবং অপ্রত্যক্ষভাবে API গুলি কীভাবে ব্যবহৃত হয় তার সহজ উদাহরণ এখানে রয়েছে:

বেকড গুডস *

ফাইল লিখুন:

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){}
});

কাঁচা ফাইল, ফাইল রাইটার এবং ফাইলসিস্টেম এপিআই ব্যবহার করে

ফাইল লিখুন:

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);

যদিও ফাইলসিস্টেম এবং ফাইল রাইটার এপিআইগুলি আর স্ট্যান্ডার্ড ট্র্যাকে নেই, তবে কিছু কিছু ক্ষেত্রে তাদের ব্যবহার ন্যায়সঙ্গত হতে পারে, আমার মতে, কারণ:

  • অ-বাস্তবায়নকারী ব্রাউজার বিক্রেতাদের কাছ থেকে পুনর্নবীকরণ করা আগ্রহগুলি এটিকে ঠিক আবার এটিকে রাখতে পারে
  • বাজারে প্রবেশের (ক্রোমিয়াম-ভিত্তিক) ব্রাউজারগুলি বেশি
  • গুগল (ক্রোমিয়ামের মূল অবদানকারী) এপিআইগুলিতে জীবনের শেষ তারিখ দেয় নি

"কিছু কেস" আপনার নিজের দ্বারা অন্তর্ভুক্ত কিনা তা অবশ্য আপনার সিদ্ধান্ত নেওয়ার জন্য।

* বেকডগুডগুলি এখানে ঠিক এই ব্যক্তি ছাড়া অন্য কেউ দ্বারা রক্ষণাবেক্ষণ করা হয় :)


7

NW.js আপনাকে ব্রাউজারে সাধারণত রাখা সমস্ত সুরক্ষা বিধিনিষেধ ছাড়াই জাভাস্ক্রিপ্ট ব্যবহার করে ডেস্কটপ অ্যাপ্লিকেশন তৈরি করতে দেয়। সুতরাং আপনি একটি ফাংশন দিয়ে এক্সিকিউটেবলগুলি চালনা করতে পারেন, বা ফাইলগুলি তৈরি / সম্পাদনা / পড়ুন / লিখুন / মুছুন। আপনি হার্ডওয়্যার অ্যাক্সেস করতে পারবেন, যেমন বর্তমানের সিপিইউ ব্যবহার বা ব্যবহারে মোট র‌্যাম ইত্যাদি

আপনি এটির সাথে উইন্ডো, লিনাক্স, বা ম্যাক ডেস্কটপ অ্যাপ্লিকেশন তৈরি করতে পারেন যা কোনও ইনস্টলেশন প্রয়োজন হয় না।

এখানে NW.js, ইউনিভার্সাল জিইউআইয়ের জন্য একটি কাঠামো রয়েছে:


1
ইলেক্ট্রন ব্যবহার করে স্থানীয় ফাইল অ্যাক্সেস করাও সম্ভব , যা জাভাস্ক্রিপ্ট ডেস্কটপ অ্যাপ্লিকেশনগুলির জন্য অনুরূপ কাঠামো।
অ্যান্ডারসন সবুজ

6

আপনি যদি উইন্ডোজটিতে স্থাপন করছেন তবে উইন্ডোজ স্ক্রিপ্ট হোস্ট ফাইল সিস্টেম এবং অন্যান্য স্থানীয় সংস্থাগুলিতে একটি খুব দরকারী JScript API সরবরাহ করে। স্থানীয় ওয়েব অ্যাপ্লিকেশনটিতে ডাব্লুএসএইচ স্ক্রিপ্টগুলি অন্তর্ভুক্ত করা আপনার ইচ্ছা মতো মার্জিত নাও হতে পারে।


3
আমি সমাধানটি ওএস-স্বতন্ত্র হতে চাই (কমপক্ষে উইন্ডোজ এবং ম্যাকের মধ্যে), তাই উইন্ডোজ স্ক্রিপ্ট হোস্ট এটি সন্তুষ্ট করে না, যদি না ম্যাক প্ল্যাটফর্মের জন্য তুলনামূলক সমাধান না হয়
জারেড

5

আপনার যদি ইনপুট ফিল্ড থাকে

<input type="file" id="file" name="file" onchange="add(event)"/>

আপনি বিএলওবি বিন্যাসে সামগ্রী ফাইল করতে পারেন:

function add(event){
  var userFile = document.getElementById('file');
  userFile.src = URL.createObjectURL(event.target.files[0]);
  var data = userFile.src;
}

4

FSO.js নতুন এইচটিএমএল 5 ফাইলসিস্টেম এপিআইকে মুড়িয়ে দেয় যা ডাব্লু 3 সি দ্বারা প্রমিত করা হয়েছে এবং স্থানীয় স্যান্ডবক্সযুক্ত ফাইল সিস্টেম থেকে পড়তে, লিখতে বা ট্র্যাভার করতে অত্যন্ত সহজ উপায় সরবরাহ করে। এটি অ্যাসিঙ্ক্রোনাস, সুতরাং ফাইল আই / ও ব্যবহারকারীর অভিজ্ঞতার সাথে হস্তক্ষেপ করবে না। :)


1
FSO.js বর্তমানে আইই, মজিলা বা সাফারি দ্বারা সমর্থিত নয়।
ফিলিপ সেন

2

আপনার যদি ক্লায়েন্টের পুরো ফাইল সিস্টেমে অ্যাক্সেসের প্রয়োজন হয়, ফাইল পড়ুন / লিখুন, পরিবর্তনের জন্য ফোল্ডারগুলি দেখুন, অ্যাপ্লিকেশনগুলি শুরু করুন, এনক্রিপ্ট করুন বা দস্তাবেজগুলিতে সাইন করুন, ইত্যাদি দয়া করে জেএসএফএস দেখুন।

এটি অ্যাকিটভেক্স বা জাভা অ্যাপলেট এর মতো ব্রাউজার প্লাগইন প্রযুক্তি ব্যবহার না করে আপনার ওয়েব পৃষ্ঠা থেকে ক্লায়েন্টের কম্পিউটার সংস্থানগুলিতে সুরক্ষিত এবং সীমাহীন অ্যাক্সেসের অনুমতি দেয়। তবে, একটি শান্তির সফ্টওয়্যার ইনস্টল করতে হবে।

জেএসএফএসের সাথে কাজ করার জন্য আপনার জাভা এবং জাভা ইই বিকাশের (সার্লেটস) প্রাথমিক জ্ঞান থাকা উচিত।

দয়া করে এখানে জেএসএফস খুঁজুন: https://github.com/jsfsproject/jsfs । এটি জিপিএলে বিনামূল্যে এবং লাইসেন্সপ্রাপ্ত


1

ধরে নিই যে জাভাস্ক্রিপ্ট কোডের যে কোনও ফাইলের প্রয়োজন হতে পারে তা ব্যবহারকারীর দ্বারা সরাসরি অনুমতি দেওয়া উচিত। বিখ্যাত ব্রাউজারগুলির নির্মাতারা সাধারণত জাভাস্ক্রিপ্ট ফাইল অ্যাক্সেস করতে দেয় না।

সমাধানটির মূল ধারণাটি হ'ল: জাভাস্ক্রিপ্ট কোডটি স্থানীয় ইউআরএল থাকা অবস্থায় ফাইল অ্যাক্সেস করতে পারে না। তবে এটি ফাইলটি তার ডেটাআরএল থাকার মাধ্যমে ব্যবহার করতে পারে: সুতরাং ব্যবহারকারী যদি কোনও ফাইল ব্রাউজ করে এবং এটি খুললে জাভাস্ক্রিপ্টটি "ইউআরএল" না পেয়ে সরাসরি এইচটিএমএল থেকে "ডেটাআরএল" পাওয়া উচিত।

তারপরে এটি রিডএএসডিটাআরএল ফাংশন এবং ফাইলরিডার অবজেক্টটি ব্যবহার করে ডেটা URL কে একটি ফাইলে পরিণত করে into উত্স এবং একটি দুর্দান্ত উদাহরণ সহ আরও একটি সম্পূর্ণ গাইড এতে রয়েছে:

https://developer.mozilla.org/en-US/docs/Web/API/FileReader?redirectlocale=en-US&redirectslug=DOM%2FFileReader


0

একটি "বাণিজ্যিক" পণ্য রয়েছে, "লোকালএফএস" যা ক্লায়েন্ট কম্পিউটারে পুরো ফাইল-সিস্টেমটি পড়তে এবং লিখতে ব্যবহার করা যেতে পারে।

ছোট উইন্ডোজ অ্যাপ্লিকেশন অবশ্যই ইনস্টল করা উচিত এবং আপনার পৃষ্ঠাতে অন্তত ছোট .js ফাইল অন্তর্ভুক্ত করা উচিত।

সুরক্ষা বৈশিষ্ট্য হিসাবে ফাইল-সিস্টেম অ্যাক্সেস এক ফোল্ডারে সীমাবদ্ধ থাকতে পারে এবং একটি গোপন কী দিয়ে সুরক্ষিত করা যেতে পারে।

https://www.fathsoft.com/localfs


-4

আপনি যদি জোনসন ফাইলগুলি পুনরুদ্ধার করতে কৌণিক এবং অ্যা্যাসনেট / এমভিসি ব্যবহার করে থাকেন তবে আপনাকে ওয়েব কনফিগারেশনে মাইম টাইপের অনুমতি দিতে হবে

<staticContent>
    <remove fileExtension=".json" />
    <mimeMap fileExtension=".json" mimeType="application/json" />
  </staticContent>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.