এইচটিএমএল ফাইলপিকার মাল্টি - ফাইলগুলি ব্যবহারের জন্য পান


12

উইন্ডো 7 তে ফায়ারফক্স v73 ব্যবহার করে নিম্নলিখিত সমস্যাটি দেখা দিয়েছে:

আমার কোডে আমি এইচটিএমএল-তে একাধিক ফাইল-প্যারালাল আপলোড করতে একটি মাল্টি-ফাইল-পিকার ব্যবহার করি:

<input type="file" id="files" name="files" multiple>

ফাইলগুলি একটি REST-API এ প্রেরণ করা হবে যা পরে তাদের প্রক্রিয়া করে। যখন আমি বর্তমানে ব্যবহার করা একটি একক ফাইল (ফাইল-এক্সপ্লোরার) নির্বাচন করি, তখন আমি একটি ত্রুটি-বার্তা পাই (সম্ভবত উইন্ডো দ্বারা) যা আমাকে বলে, ফাইলটি ব্যবহার করা হচ্ছে না বলে এটি চয়ন করা যায় না। যদি আমি একাধিক ফাইল বাছাই করার চেষ্টা করি যার মধ্যে এক বা একাধিক ফাইল ব্যবহৃত হয় তবে আমার কোনও ত্রুটি ঘটেনি তবে ফাইল-ইন-ব্যবহারটি পৌঁছে গেলে এবং ফাইলটি প্রকাশ হওয়ার অপেক্ষায় আপলোডটি থামবে বলে মনে হচ্ছে। এটি একটি সময়সীমা অপেক্ষা করার অনুরোধ বাড়ে (যা আমার ক্ষেত্রে 1 মিনিট)।

ফাইলগুলি আপলোড করার চেষ্টা করার আগে সমস্যাটি ধরার কোনও বিকল্প আছে কি?

PS: আমি ক্রোমে একই চেষ্টা করেছি এবং এটি REST-API এ অনুরোধ প্রেরণের আগে একটি ত্রুটি প্রদান করে।


আপনি কি আপনার এজ্যাক্স কলটি দেখাতে পারবেন?
ইসলাম এলশোবোকশী

উত্তর:


3

এটি একটি ওএস ইস্যুর মতো শোনাচ্ছে।
আপনার ফাইল অ্যাক্সেস করা থেকে কিছু লক করছে এবং এটি আপনার পক্ষে ঠিক করা দরকার।

আমি সন্দেহ করি এটি একটি সাধারণ সমস্যা হয়ে উঠবে, এবং একই সমস্যাটি অনুভব করতে না পেরে সমাধান তৈরি করা বেশ কঠিন তবে আপনি যে ফাইলগুলি প্রেরণ করবেন তার আগে আপনি যা পড়তে পারেন তার একটি বিষয় আপনি চেষ্টা করতে পারেন । এটি Blob.prototype.arrayBufferপদ্ধতি সহ বেশ সুবিধাজনকভাবে করা যায় , যা পলিফিল্ড হতে পারে।

প্রচুর আই / ও এড়াতে, আপনি এমনকি Blob.prototype.slice() পদ্ধতির জন্য এটির একটি ছোট্ট অংশ পড়ার চেষ্টা করতে পারেন ।

const input = document.getElementById('inp');
const btn = document.getElementById('btn');

btn.onclick = async(evt) => {
  testAllFilesAvailability(input.files)
    .then(() => console.log('all good'))
    .catch(() => console.log('some are unavailable'));
}

function testAllFilesAvailability(files) {
  return Promise.all(
    [...files].map(file =>
      file.slice(0, Math.min(file.size, 4)) // don't load the whole file
      .arrayBuffer() // Blob.prototype.arrayBuffer may require a polyfill
    )
  );
}
<pre>
1. Select some files from the input
2. Change one of this files name on your hard-drive or even delete it
3. Press the button
</pre>

<input type="file" multiple id="inp">
<button id="btn">Test Availability</button>


সমাধানের জন্য কাইডো ধন্যবাদ। আপনার +50 খ্যাতি আছে। Lifesaver হয়!
কেভিন এইচ।

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