یک برنامه را به عنوان یک مدیریت کننده فایل در سیستم عامل ثبت کنید.
حالا که برنامههای وب قادر به خواندن و نوشتن فایلها هستند، گام منطقی بعدی این است که به توسعهدهندگان اجازه دهیم همین برنامههای وب را به عنوان کنترلکنندههای فایل برای فایلهایی که برنامههایشان میتوانند ایجاد و پردازش کنند، اعلام کنند. رابط برنامهنویسی کاربردی مدیریت فایل (File Handling API) به شما امکان میدهد دقیقاً همین کار را انجام دهید. پس از ثبت یک برنامه ویرایشگر متن به عنوان کنترلکننده فایل و پس از نصب آن، میتوانید روی یک فایل .txt در macOS کلیک راست کرده و گزینه «دریافت اطلاعات» را انتخاب کنید تا به سیستم عامل دستور دهید که همیشه فایلهای .txt را با این برنامه به عنوان پیشفرض باز کند.
موارد استفاده پیشنهادی برای API مدیریت فایل
نمونههایی از سایتهایی که ممکن است از این API استفاده کنند عبارتند از:
- برنامههای آفیس مانند ویرایشگرهای متن، برنامههای صفحه گسترده و سازندگان اسلایدشو.
- ویرایشگرهای گرافیکی و ابزارهای طراحی.
- ابزارهای ویرایشگر مراحل بازیهای ویدیویی
نحوه استفاده از API مدیریت فایل
بهبود تدریجی
API مدیریت فایل به خودی خود نمیتواند polyfill شود. با این حال، قابلیت باز کردن فایلها با یک برنامه وب از دو طریق دیگر قابل دستیابی است:
- API هدف اشتراکگذاری وب به توسعهدهندگان اجازه میدهد تا برنامه خود را به عنوان یک هدف اشتراکگذاری مشخص کنند تا فایلها بتوانند از صفحه اشتراکگذاری سیستم عامل باز شوند.
- API دسترسی به سیستم فایل میتواند با کشیدن و رها کردن فایل ادغام شود، بنابراین توسعهدهندگان میتوانند فایلهای رها شده را در برنامهای که از قبل باز شده است، مدیریت کنند.
پشتیبانی مرورگر
تشخیص ویژگی
برای بررسی اینکه آیا API مدیریت فایل پشتیبانی میشود، از دستور زیر استفاده کنید:
if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
// The File Handling API is supported.
}
بخش اعلانی API مدیریت فایل
در اولین قدم، برنامههای وب باید به صورت اعلانی در مانیفست برنامه وب خود توضیح دهند که چه نوع فایلهایی را میتوانند مدیریت کنند. API مدیریت فایل، مانیفست برنامه وب را با یک ویژگی جدید به نام "file_handlers" گسترش میدهد که آرایهای از، خب، مدیریتکنندههای فایل را میپذیرد. یک مدیریتکننده فایل، شیءای با این ویژگیها است:
- یک ویژگی
"action"که به عنوان مقدار خود به یک URL در محدوده برنامه اشاره میکند. - یک ویژگی
"accept"با یک شیء از نوع MIME به عنوان کلید و فهرستهایی از پسوندهای فایل به عنوان مقادیر آنها. - یک ویژگی
"icons"با آرایهای از آیکونهایImageResource. برخی از سیستمعاملها به یک نوع فایل اجازه میدهند تا آیکونی را نمایش دهد که نه تنها آیکون برنامه مرتبط است، بلکه یک آیکون ویژه مربوط به استفاده از آن نوع فایل با برنامه است. - یک ویژگی
"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"
}
]
}
این برای یک برنامه فرضی است که فایلهای مقادیر جدا شده با کاما ( .csv ) را در /open-csv ، فایلهای گرافیک برداری مقیاسپذیر ( .svg ) را در /open-svg و یک فرمت فایل Grafr ساختگی با هر یک از پسوندهای .grafr ، .graf یا .graph را در /open-graf مدیریت میکند. دو مورد اول در یک کلاینت واحد باز میشوند، و مورد آخر در صورت مدیریت چندین فایل در چندین کلاینت.
بخش ضروری API مدیریت فایل
حالا که برنامه از نظر تئوری اعلام کرده است که چه فایلهایی را میتواند در کدام URL درون-دامنه مدیریت کند، باید در عمل کاری را با فایلهای ورودی انجام دهد. اینجاست که 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" را در منوی زمینه انتخاب کنید. میتوانید پیادهسازی آن را در کد منبع بررسی کنید.


.excalidraw است.امنیت
تیم کروم، رابط برنامهنویسی کاربردی مدیریت فایل (File Handling API) را با استفاده از اصول اصلی تعریفشده در «کنترل دسترسی به ویژگیهای قدرتمند پلتفرم وب» ، شامل کنترل کاربر، شفافیت و ارگونومی، طراحی و پیادهسازی کرده است.
مجوزها، تداوم مجوزها و بهروزرسانیهای مدیریتکننده فایل
برای اطمینان از اعتماد کاربر و ایمنی فایلهای کاربران، هنگامی که رابط برنامهنویسی کاربردی مدیریت فایل، فایلی را باز میکند، قبل از اینکه یک PWA بتواند فایل را مشاهده کند، یک درخواست مجوز نمایش داده میشود. این درخواست مجوز درست پس از انتخاب PWA توسط کاربر برای باز کردن فایل نمایش داده میشود، به طوری که این مجوز به طور تنگاتنگی با عمل باز کردن فایل با استفاده از PWA مرتبط باشد و آن را قابل فهمتر و مرتبطتر کند.
این مجوز هر بار نشان داده میشود تا زمانی که کاربر روی «مجاز» یا «مسدود کردن» مدیریت فایل برای سایت کلیک کند، یا سه بار درخواست را نادیده بگیرد (پس از آن کرومیوم این مجوز را ممنوع و مسدود میکند). تنظیم انتخاب شده در طول بسته شدن و بازگشایی PWA ادامه خواهد داشت.
هنگامی که بهروزرسانیهای مانیفست و تغییرات در بخش "file_handlers" شناسایی شوند، مجوزها بازنشانی میشوند.
چالشهای مربوط به فایل
دسته بزرگی از مسیرهای حمله وجود دارد که با اجازه دادن به وبسایتها برای دسترسی به فایلها باز میشوند. این موارد در مقاله مربوط به API دسترسی به سیستم فایل شرح داده شدهاند. قابلیت امنیتی اضافی که API مدیریت فایل نسبت به API دسترسی به سیستم فایل ارائه میدهد، امکان اعطای دسترسی به فایلهای خاص از طریق رابط کاربری داخلی سیستم عامل است، برخلاف انتخابگر فایل که توسط یک برنامه وب نشان داده میشود.
هنوز این خطر وجود دارد که کاربران با باز کردن یک فایل، ناخواسته به یک برنامه وب دسترسی به آن را بدهند. با این حال، به طور کلی درک میشود که باز کردن یک فایل به برنامهای که با آن باز شده است اجازه میدهد تا آن فایل را بخواند و/یا دستکاری کند. بنابراین، انتخاب صریح کاربر برای باز کردن یک فایل در یک برنامه نصب شده، مانند از طریق منوی زمینه "باز کردن با..."، میتواند به عنوان یک سیگنال کافی از اعتماد به برنامه تلقی شود.
چالشهای مدیریتکننده پیشفرض
استثنا در این مورد زمانی است که هیچ برنامهای روی سیستم میزبان برای یک نوع فایل خاص وجود نداشته باشد. در این حالت، برخی از سیستم عاملهای میزبان ممکن است به طور خودکار و بدون هیچ گونه دخالتی از سوی کاربر، کنترلکنندهی تازه ثبت شده را به کنترلکنندهی پیشفرض برای آن نوع فایل ارتقا دهند. این بدان معناست که اگر کاربر روی فایلی از آن نوع دوبار کلیک کند، آن فایل به طور خودکار در برنامهی وب ثبت شده باز میشود. در چنین سیستم عاملهای میزبانی، هنگامی که عامل کاربر تشخیص میدهد که هیچ کنترلکنندهی پیشفرضی برای آن نوع فایل وجود ندارد، ممکن است برای جلوگیری از ارسال تصادفی محتوای یک فایل به یک برنامهی وب بدون رضایت کاربر، یک درخواست مجوز صریح لازم باشد.
کنترل کاربر
این مشخصات بیان میکند که مرورگرها نباید هر سایتی را که میتواند فایلها را مدیریت کند، به عنوان یک کنترلکننده فایل ثبت کنند. در عوض، ثبت کنترلکننده فایل باید پشت نصب باشد و هرگز بدون تأیید صریح کاربر انجام نشود، به خصوص اگر قرار است سایتی به کنترلکننده پیشفرض تبدیل شود. به جای ربودن پسوندهای موجود مانند .json که احتمالاً کاربر از قبل یک کنترلکننده پیشفرض برای آن ثبت کرده است، سایتها باید ساخت پسوندهای خودشان را در نظر بگیرند.
شفافیت
همه سیستم عاملها به کاربران اجازه میدهند تا پیوندهای فایل فعلی را تغییر دهند. این خارج از محدوده مرورگر است.
بازخورد
تیم کروم میخواهد از تجربیات شما در مورد رابط برنامهنویسی کاربردی مدیریت فایل (File Handling API) مطلع شود.
در مورد طراحی API به ما بگویید
آیا چیزی در مورد API وجود دارد که آنطور که انتظار داشتید کار نمیکند؟ یا متدها یا ویژگیهایی که برای پیادهسازی ایدهتان به آنها نیاز دارید، وجود ندارند؟ در مورد مدل امنیتی سؤال یا نظری دارید؟
- یک مشکل خاص را در مخزن گیتهاب مربوطه ثبت کنید، یا نظرات خود را به یک مشکل موجود اضافه کنید.
گزارش مشکل در پیادهسازی
آیا در پیادهسازی کروم اشکالی پیدا کردید؟ یا پیادهسازی با مشخصات متفاوت است؟
- یک اشکال را در new.crbug.com ثبت کنید. حتماً تا حد امکان جزئیات، دستورالعملهای ساده برای بازتولید را ذکر کنید و در کادر Components
UI>Browser>WebAppInstalls>FileHandlingوارد کنید.
نمایش پشتیبانی از API
آیا قصد دارید از API مدیریت فایل استفاده کنید؟ پشتیبانی عمومی شما به تیم کروم کمک میکند تا ویژگیها را اولویتبندی کنند و به سایر فروشندگان مرورگر نشان میدهد که پشتیبانی از آنها چقدر حیاتی است.
- نحوهی استفاده از آن را در تاپیک گفتمان WICG به اشتراک بگذارید.
- با استفاده از هشتگ
#FileHandlingیک توییت به @ChromiumDev ارسال کنید و به ما بگویید که کجا و چگونه از آن استفاده میکنید.
لینکهای مفید
- توضیح دهنده عمومی
- نسخه آزمایشی API مدیریت فایل | منبع آزمایشی API مدیریت فایل
- اشکال ردیابی کروم
- ورودی ChromeStatus.com
- کامپوننت چشمک زن:
UI>Browser>WebAppInstalls>FileHandling - بررسی تگ
- جایگاه استانداردهای موزیلا
تقدیرنامهها
رابط برنامهنویسی کاربردی مدیریت فایل (File Handling API) توسط اریک ویلیگرز ، جی هریس و ریمز خوری مشخص شده است. این مقاله توسط جو مدلی بررسی شده است.