অপারেটিং সিস্টেমের সাথে একটি ফাইল হ্যান্ডলার হিসাবে একটি অ্যাপ নিবন্ধন করুন৷
এখন যেহেতু ওয়েব অ্যাপগুলি ফাইলগুলি পড়তে এবং লিখতে সক্ষম , পরবর্তী যৌক্তিক পদক্ষেপটি হল ডেভেলপারদের এই ওয়েব অ্যাপগুলিকে তাদের অ্যাপগুলি তৈরি এবং প্রক্রিয়া করতে পারে এমন ফাইলগুলির জন্য ফাইল হ্যান্ডলার হিসাবে ঘোষণা করা। ফাইল হ্যান্ডলিং API আপনাকে ঠিক এটি করতে দেয়। ফাইল হ্যান্ডলার হিসাবে একটি টেক্সট এডিটর অ্যাপ নিবন্ধন করার পরে এবং এটি ইনস্টল করার পরে, আপনি macOS-এ একটি .txt
ফাইলে ডান-ক্লিক করতে পারেন এবং "তথ্য পান" নির্বাচন করতে পারেন তারপর OS কে নির্দেশ দিতে পারেন যে এটি সর্বদা এই অ্যাপের সাথে .txt
ফাইলগুলিকে ডিফল্ট হিসাবে খুলতে হবে। .
ফাইল হ্যান্ডলিং API-এর জন্য প্রস্তাবিত ব্যবহারের ক্ষেত্রে
এই API ব্যবহার করতে পারে এমন সাইটগুলির উদাহরণগুলির মধ্যে রয়েছে:
- অফিস অ্যাপ্লিকেশন যেমন টেক্সট এডিটর, স্প্রেডশীট অ্যাপস এবং স্লাইডশো নির্মাতারা।
- গ্রাফিক্স সম্পাদক এবং অঙ্কন সরঞ্জাম।
- ভিডিও গেম লেভেল এডিটর টুল।
কিভাবে ফাইল হ্যান্ডলিং API ব্যবহার করবেন
প্রগতিশীল বর্ধন
ফাইল হ্যান্ডলিং API পলিফিল করা যাবে না। একটি ওয়েব অ্যাপ দিয়ে ফাইল খোলার কার্যকারিতা, যাইহোক, দুটি অন্য মাধ্যমে অর্জন করা যেতে পারে:
- ওয়েব শেয়ার টার্গেট এপিআই ডেভেলপারদের তাদের অ্যাপকে শেয়ার টার্গেট হিসাবে নির্দিষ্ট করতে দেয় যাতে ফাইলগুলি অপারেটিং সিস্টেমের শেয়ার শীট থেকে খোলা যায়।
- ফাইল সিস্টেম অ্যাক্সেস API ফাইল ড্র্যাগ এবং ড্রপের সাথে একত্রিত করা যেতে পারে, যাতে বিকাশকারীরা ইতিমধ্যে খোলা অ্যাপে ড্রপ করা ফাইলগুলি পরিচালনা করতে পারে।
ব্রাউজার সমর্থন
বৈশিষ্ট্য সনাক্তকরণ
ফাইল হ্যান্ডলিং API সমর্থিত কিনা তা পরীক্ষা করতে, ব্যবহার করুন:
if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
// The File Handling API is supported.
}
ফাইল হ্যান্ডলিং API-এর ঘোষণামূলক অংশ
প্রথম ধাপ হিসেবে, ওয়েব অ্যাপগুলিকে তাদের ওয়েব অ্যাপে ঘোষণামূলকভাবে বর্ণনা করতে হবে যে তারা কী ধরনের ফাইল পরিচালনা করতে পারে। ফাইল হ্যান্ডলিং API "file_handlers"
নামক একটি নতুন সম্পত্তির সাথে ওয়েব অ্যাপ ম্যানিফেস্টকে প্রসারিত করে যা ফাইল হ্যান্ডলারের একটি অ্যারেকে গ্রহণ করে। একটি ফাইল হ্যান্ডলার এই বৈশিষ্ট্য সহ একটি বস্তু:
- একটি
"action"
প্রপার্টি যা অ্যাপের স্কোপের মধ্যে একটি URL এর মান হিসেবে নির্দেশ করে। - MIME-টাইপের একটি বস্তুর সাথে কী এবং ফাইল এক্সটেনশনের তালিকা তাদের মান হিসাবে একটি
"accept"
। -
ImageResource
আইকনগুলির একটি অ্যারের সাথে একটি"icons"
বৈশিষ্ট্য। কিছু অপারেটিং সিস্টেম একটি ফাইল টাইপ অ্যাসোসিয়েশনকে একটি আইকন প্রদর্শন করার অনুমতি দেয় যা শুধুমাত্র সংশ্লিষ্ট অ্যাপ্লিকেশন আইকন নয়, বরং একটি বিশেষ আইকন যা অ্যাপ্লিকেশনটির সাথে সেই ফাইলের প্রকারের ব্যবহার সম্পর্কিত। - একটি
"launch_type"
বৈশিষ্ট্য যা নির্ধারণ করে যে একাধিক ফাইল একটি একক ক্লায়েন্টে খোলা হবে নাকি একাধিক ক্লায়েন্টে। ডিফল্ট হল"single-client"
। ব্যবহারকারী যদি একাধিক ফাইল খোলে এবং যদি ফাইল হ্যান্ডলারটিকে"multiple-clients"
দিয়ে তার"launch_type"
হিসাবে টীকা করা হয়, তবে একাধিক অ্যাপ লঞ্চ হবে, এবং প্রতিটি লঞ্চের জন্য,LaunchParams.files
অ্যারে ( আরও নীচে দেখুন) হবে শুধু একটি উপাদান আছে.
নীচের উদাহরণটি, ওয়েব অ্যাপ ম্যানিফেস্টের শুধুমাত্র প্রাসঙ্গিক উদ্ধৃতি দেখাচ্ছে, এটিকে আরও পরিষ্কার করা উচিত:
{
"file_handlers": [
{
"action": "/open-csv",
"accept": {
"text/csv": [".csv"]
},
"icons": [
{
"src": "csv-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "single-client"
},
{
"action": "/open-svg",
"accept": {
"image/svg+xml": ".svg"
},
"icons": [
{
"src": "svg-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "single-client"
},
{
"action": "/open-graf",
"accept": {
"application/vnd.grafr.graph": [".grafr", ".graf"],
"application/vnd.alternative-graph-app.graph": ".graph"
},
"icons": [
{
"src": "graf-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "multiple-clients"
}
]
}
এটি একটি অনুমানমূলক অ্যাপ্লিকেশনের জন্য যা /open-csv
এ কমা-বিভাজিত মান ( .csv
) ফাইলগুলি, /open-svg
এ স্কেলযোগ্য ভেক্টর গ্রাফিক্স ( .svg
) ফাইলগুলি এবং .grafr
এর যেকোনো একটির সাথে একটি তৈরি করা Grafr ফাইল বিন্যাস পরিচালনা করে৷ , .graf
, বা .graph
/open-graf
এক্সটেনশন হিসাবে। প্রথম দুটি একটি একক ক্লায়েন্টে খুলবে, একাধিক ক্লায়েন্টে শেষটি খুলবে যদি একাধিক ফাইল পরিচালনা করা হয়।
ফাইল হ্যান্ডলিং API এর অপরিহার্য অংশ
এখন অ্যাপটি ঘোষণা করেছে যে এটি কোন ফাইলগুলিকে তাত্ত্বিকভাবে কোন ইন-স্কোপ ইউআরএলে পরিচালনা করতে পারে, অনুশীলনে আগত ফাইলগুলির সাথে এটি অপরিহার্যভাবে কিছু করতে হবে। এখানেই launchQueue
খেলায় আসে। লঞ্চ করা ফাইলগুলি অ্যাক্সেস করতে, একটি সাইটকে window.launchQueue
অবজেক্টের জন্য একটি ভোক্তা নির্দিষ্ট করতে হবে। নির্দিষ্ট ভোক্তার দ্বারা পরিচালনা না করা পর্যন্ত লঞ্চগুলি সারিবদ্ধ থাকে, যা প্রতিটি লঞ্চের জন্য ঠিক একবার আহ্বান করা হয়। এই পদ্ধতিতে, ভোক্তা কখন নির্দিষ্ট করা হয়েছিল তা নির্বিশেষে প্রতিটি লঞ্চ পরিচালনা করা হয়।
if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
launchQueue.setConsumer((launchParams) => {
// Nothing to do when the queue is empty.
if (!launchParams.files.length) {
return;
}
for (const fileHandle of launchParams.files) {
// Handle the file.
}
});
}
DevTools সমর্থন
এই লেখার সময় কোন DevTools সমর্থন নেই, কিন্তু আমি সমর্থন যোগ করার জন্য একটি বৈশিষ্ট্য অনুরোধ দায়ের করেছি।
ডেমো
আমি Excalidraw- তে ফাইল হ্যান্ডলিং সমর্থন যোগ করেছি, একটি কার্টুন-শৈলী অঙ্কন অ্যাপ। এটি পরীক্ষা করার জন্য, আপনাকে প্রথমে Excalidraw ইনস্টল করতে হবে। আপনি যখন এটির সাথে একটি ফাইল তৈরি করেন এবং এটিকে আপনার ফাইল সিস্টেমে কোথাও সংরক্ষণ করেন, তখন আপনি একটি ডাবল ক্লিক বা একটি ডান ক্লিকের মাধ্যমে ফাইলটি খুলতে পারেন এবং তারপর প্রসঙ্গ মেনুতে "Excalidraw" নির্বাচন করতে পারেন৷ আপনি সোর্স কোডে বাস্তবায়ন পরীক্ষা করতে পারেন।
নিরাপত্তা
Chrome টিম ব্যবহারকারীর নিয়ন্ত্রণ, স্বচ্ছতা, এবং ergonomics সহ শক্তিশালী ওয়েব প্ল্যাটফর্ম বৈশিষ্ট্যগুলিতে অ্যাক্সেস নিয়ন্ত্রণে সংজ্ঞায়িত মূল নীতিগুলি ব্যবহার করে ফাইল হ্যান্ডলিং API ডিজাইন এবং প্রয়োগ করেছে৷
অনুমতি, অনুমতি অধ্যবসায়, এবং ফাইল হ্যান্ডলার আপডেট
ব্যবহারকারীর বিশ্বাস এবং ব্যবহারকারীদের ফাইলের নিরাপত্তা নিশ্চিত করার জন্য, যখন ফাইল হ্যান্ডলিং API একটি ফাইল খোলে, PWA একটি ফাইল দেখার আগে একটি অনুমতি প্রম্পট দেখানো হবে। ব্যবহারকারী একটি ফাইল খোলার জন্য PWA নির্বাচন করার পরেই এই অনুমতি প্রম্পটটি দেখানো হবে, যাতে PWA ব্যবহার করে একটি ফাইল খোলার ক্রিয়াকলাপের সাথে অনুমতিটি শক্তভাবে মিলিত হয়, এটি আরও বোধগম্য এবং প্রাসঙ্গিক করে তোলে।
এই অনুমতি প্রতিবার দেখাবে যতক্ষণ না ব্যবহারকারী সাইটটির জন্য ফাইল পরিচালনার অনুমতি বা ব্লক করতে ক্লিক করে, অথবা প্রম্পটটি তিনবার উপেক্ষা করে (যার পরে ক্রোমিয়াম এই অনুমতিটিকে নিষেধাজ্ঞা এবং ব্লক করবে)। নির্বাচিত সেটিং PWA বন্ধ এবং পুনরায় খোলার জুড়ে থাকবে।
যখন "file_handlers"
বিভাগে ম্যানিফেস্ট আপডেট এবং পরিবর্তনগুলি সনাক্ত করা হয়, তখন অনুমতিগুলি পুনরায় সেট করা হবে৷
ফাইল-সম্পর্কিত চ্যালেঞ্জ
আক্রমণ ভেক্টরের একটি বড় বিভাগ রয়েছে যা ওয়েবসাইটগুলিকে ফাইলগুলিতে অ্যাক্সেসের অনুমতি দিয়ে খোলা হয়। এগুলি ফাইল সিস্টেম অ্যাক্সেস API-এর নিবন্ধে বর্ণিত হয়েছে। ফাইল হ্যান্ডলিং এপিআই ফাইল সিস্টেম অ্যাক্সেস এপিআই-এর মাধ্যমে যে অতিরিক্ত নিরাপত্তা-প্রাসঙ্গিক ক্ষমতা প্রদান করে তা হল অপারেটিং সিস্টেমের অন্তর্নির্মিত UI-এর মাধ্যমে নির্দিষ্ট ফাইলগুলিতে অ্যাক্সেস মঞ্জুর করার ক্ষমতা, একটি ওয়েব অ্যাপ্লিকেশন দ্বারা দেখানো ফাইল পিকারের মাধ্যমে।
এখনও একটি ঝুঁকি আছে যে ব্যবহারকারীরা অনিচ্ছাকৃতভাবে একটি ফাইল খোলার মাধ্যমে একটি ওয়েব অ্যাপ্লিকেশন অ্যাক্সেস মঞ্জুর করতে পারে৷ যাইহোক, এটি সাধারণত বোঝা যায় যে একটি ফাইল খোলার মাধ্যমে এটি যে অ্যাপ্লিকেশনটি খোলা হয় সেটি ফাইলটি পড়তে এবং/অথবা ম্যানিপুলেট করার অনুমতি দেয়। অতএব, একটি ইনস্টল করা অ্যাপ্লিকেশনে একটি ফাইল খোলার জন্য ব্যবহারকারীর স্পষ্ট পছন্দ, যেমন একটি "ওপেন উইথ…" প্রসঙ্গ মেনুর মাধ্যমে, অ্যাপ্লিকেশনটিতে বিশ্বাসের যথেষ্ট সংকেত হিসাবে পড়া যেতে পারে।
ডিফল্ট হ্যান্ডলার চ্যালেঞ্জ
এর ব্যতিক্রম হল যখন প্রদত্ত ফাইল প্রকারের জন্য হোস্ট সিস্টেমে কোনো অ্যাপ্লিকেশন নেই। এই ক্ষেত্রে, কিছু হোস্ট অপারেটিং সিস্টেম স্বয়ংক্রিয়ভাবে নতুন নিবন্ধিত হ্যান্ডলারকে সেই ফাইল টাইপের জন্য ডিফল্ট হ্যান্ডলারে নীরবে এবং ব্যবহারকারীর কোনো হস্তক্ষেপ ছাড়াই প্রচার করতে পারে। এর অর্থ হল ব্যবহারকারী যদি এই ধরনের একটি ফাইলে ডাবল ক্লিক করেন, তবে এটি নিবন্ধিত ওয়েব অ্যাপে স্বয়ংক্রিয়ভাবে খুলবে। এই ধরনের হোস্ট অপারেটিং সিস্টেমে, যখন ব্যবহারকারী এজেন্ট নির্ধারণ করে যে ফাইলের প্রকারের জন্য কোনও বিদ্যমান ডিফল্ট হ্যান্ডলার নেই, তখন ব্যবহারকারীর সম্মতি ছাড়াই একটি ওয়েব অ্যাপ্লিকেশনে ফাইলের বিষয়বস্তু দুর্ঘটনাক্রমে পাঠানো এড়াতে একটি স্পষ্ট অনুমতি প্রম্পট প্রয়োজন হতে পারে।
ব্যবহারকারী নিয়ন্ত্রণ
স্পেকটি বলে যে ব্রাউজারগুলি ফাইল হ্যান্ডলার হিসাবে ফাইলগুলি পরিচালনা করতে পারে এমন প্রতিটি সাইট নিবন্ধন করা উচিত নয়। পরিবর্তে, ফাইল হ্যান্ডলিং রেজিস্ট্রেশন ইনস্টলেশনের পিছনে গেট করা উচিত এবং স্পষ্ট ব্যবহারকারীর নিশ্চিতকরণ ছাড়া কখনই ঘটবে না, বিশেষ করে যদি কোনও সাইট ডিফল্ট হ্যান্ডলার হয়ে যায়। .json
এর মতো বিদ্যমান এক্সটেনশনগুলি হাইজ্যাক করার পরিবর্তে ব্যবহারকারীর সম্ভবত ইতিমধ্যেই একটি ডিফল্ট হ্যান্ডলার নিবন্ধিত রয়েছে, সাইটগুলিকে তাদের নিজস্ব এক্সটেনশনগুলি তৈরি করার কথা বিবেচনা করা উচিত৷
স্বচ্ছতা
সমস্ত অপারেটিং সিস্টেম ব্যবহারকারীদের বর্তমান ফাইল অ্যাসোসিয়েশন পরিবর্তন করার অনুমতি দেয়। এটি ব্রাউজারের সুযোগের বাইরে।
প্রতিক্রিয়া
Chrome টিম ফাইল হ্যান্ডলিং API এর সাথে আপনার অভিজ্ঞতার কথা শুনতে চায়৷
API ডিজাইন সম্পর্কে আমাদের বলুন
API সম্পর্কে এমন কিছু আছে যা আপনার প্রত্যাশিত মত কাজ করে না? অথবা আপনার ধারণা বাস্তবায়নের জন্য আপনার প্রয়োজনীয় পদ্ধতি বা বৈশিষ্ট্যগুলি অনুপস্থিত আছে? নিরাপত্তা মডেল সম্পর্কে একটি প্রশ্ন বা মন্তব্য আছে?
- সংশ্লিষ্ট গিটহাব রেপোতে একটি বিশেষ সমস্যা ফাইল করুন, বা বিদ্যমান সমস্যাটিতে আপনার চিন্তা যোগ করুন।
বাস্তবায়নের সাথে একটি সমস্যা রিপোর্ট করুন
আপনি কি Chrome এর বাস্তবায়নের সাথে একটি বাগ খুঁজে পেয়েছেন? অথবা বাস্তবায়ন বৈশিষ্ট থেকে ভিন্ন?
- new.crbug.com এ একটি বাগ ফাইল করুন। আপনি যতটা পারেন বিশদ অন্তর্ভুক্ত করতে ভুলবেন না, পুনরুত্পাদনের জন্য সহজ নির্দেশাবলী, এবং উপাদান বাক্সে
UI>Browser>WebAppInstalls>FileHandling
লিখুন। দ্রুত এবং সহজ রিপ্রো শেয়ার করার জন্য গ্লিচ দুর্দান্ত কাজ করে।
API এর জন্য সমর্থন দেখান
আপনি কি ফাইল হ্যান্ডলিং API ব্যবহার করার পরিকল্পনা করছেন? আপনার সর্বজনীন সমর্থন Chrome টিমকে বৈশিষ্ট্যগুলিকে অগ্রাধিকার দিতে সাহায্য করে এবং অন্যান্য ব্রাউজার বিক্রেতাদের দেখায় যে তাদের সমর্থন করা কতটা গুরুত্বপূর্ণ৷
- WICG ডিসকোর্স থ্রেডে আপনি কীভাবে এটি ব্যবহার করার পরিকল্পনা করছেন তা শেয়ার করুন।
- হ্যাশট্যাগ
#FileHandling
ব্যবহার করে @ChromiumDev- এ একটি টুইট পাঠান এবং আপনি কোথায় এবং কীভাবে এটি ব্যবহার করছেন তা আমাদের জানান।
সহায়ক লিঙ্ক
- পাবলিক ব্যাখ্যাকারী
- ফাইল হ্যান্ডলিং API ডেমো | ফাইল হ্যান্ডলিং API ডেমো উৎস
- ক্রোমিয়াম ট্র্যাকিং বাগ
- ChromeStatus.com এন্ট্রি
- ব্লিঙ্ক কম্পোনেন্ট:
UI>Browser>WebAppInstalls>FileHandling
- TAG পর্যালোচনা
- মজিলা স্ট্যান্ডার্ড পজিশন
স্বীকৃতি
ফাইল হ্যান্ডলিং এপিআই এরিক উইলিগারস , জে হ্যারিস এবং রেমস খুরি দ্বারা নির্দিষ্ট করা হয়েছিল। এই নিবন্ধটি জো মেডলি দ্বারা পর্যালোচনা করা হয়েছে।