การแก้ไขข้อบกพร่อง Filesystem API

ระบบไฟล์ HTML5 เป็น API ที่มีประสิทธิภาพ พลังมาพร้อมความซับซ้อน ซึ่งมีความซับซ้อน ความยุ่งยากในการแก้ไขข้อบกพร่องก็จะเพิ่มขึ้นด้วย เป็นที่น่าเสียใจที่ DevTools ของ Chrome ยังไม่รองรับ Filesystem API ในตอนนี้ ทำให้การแก้ไขข้อบกพร่องยากกว่าที่ควรจะเป็น สิ่งที่ทำได้ยากคือฉันต้องเขียนโค้ดเพื่อแสดง/นำไฟล์ในระบบออก

ระหว่างการทำงานกับ Filesystem API ผมได้เคล็ดลับ 2-3 ข้อจากที่เคยคิดว่าจะส่งต่อให้ แต่ละเคล็ดลับมีขีดจำกัดของตัวเอง แต่การใช้เคล็ดลับเหล่านี้ร่วมกันจะทำให้คุณได้รับ 90% จากทั้งหมด นี่คือ 5 อันดับแรก

  1. ตรวจสอบว่าคุณไม่ได้เรียกใช้จาก file:// เกมนี้แหละที่ใครๆ ก็เคยเจอ Chrome กำหนดข้อจำกัดหลักด้านความปลอดภัยใน file:// API ไฟล์ขั้นสูงหลายรายการ (BlobBuilder, FileReader, Filesystem API,...) แสดงข้อผิดพลาดหรือล้มเหลวโดยไม่มีการแจ้งเตือนหากคุณเรียกใช้แอปในเครื่องจาก file:// หากคุณไม่มีเว็บเซิร์ฟเวอร์อยู่กับตัว คุณอาจเริ่มใช้ Chrome ด้วยแฟล็ก --allow-file-access-from-files เพื่อข้ามข้อจำกัดด้านความปลอดภัยนี้ โปรดใช้แฟล็กนี้สำหรับการทดสอบเท่านั้น

  2. SECURITY_ERR หรือ QUOTA_EXCEEDED_ERR ที่น่ากลัว กรณีนี้มักเกิดขึ้นเมื่อพยายามเขียนข้อมูล แต่คุณอยู่ภายใต้อิทธิพลของ #1 หากไม่เป็นเช่นนั้น อาจเป็นไปได้ว่าคุณไม่มีโควต้า โควต้าที่ใช้เปิดระบบไฟล์ได้มี 2 ประเภท ได้แก่ TEMPORARY หรือ PERSISTENT หากคุณใช้แบบหลัง ผู้ใช้จะต้องให้สิทธิ์พื้นที่เก็บข้อมูลถาวรแก่แอปของคุณอย่างชัดแจ้ง ดูวิธีดำเนินการจากโพสต์นี้

  3. FTW URL ของ filesystem: วิธีเปิด URL filesystem: สำหรับราก DirectoryEntry ของต้นทางของแอปนั้นมีประโยชน์ นั่นหมายความว่าอย่างไร ตัวอย่างเช่น หากแอปอยู่ใน www.example.com ให้เปิด filesystem:http://www.example.com/temporary/ ในแท็บใหม่ Chrome จะแสดงรายการแบบอ่านอย่างเดียวของไฟล์/โฟลเดอร์ที่จัดเก็บต้นทางของแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับ URL ของ filesystem: ได้ที่ https://www.html5rocks.com/en/tutorials/file/filesystem/#toc-filesystemurls

  4. chrome://settings/cookies เป็นเพื่อนของคุณ หน้านี้ช่วยให้คุณป้อนข้อมูลที่เก็บไว้สำหรับต้นทางได้ ซึ่งรวมถึงพื้นที่เก็บข้อมูลฐานข้อมูล, AppCache, คุกกี้, localStorage และสิ่งต่างๆ ใน FileSystem API แต่ขอให้เตือนไว้ก่อนว่าทั้งหมดหรืออะไรก็ตาม คุณจะนำไฟล์หรือข้อมูลชิ้นเดียวออกไม่ได้

  5. อย่าลืมการเรียกกลับที่มีข้อผิดพลาด Filesystem API ทำงานในระบบที่ไม่พร้อมกัน (ยกเว้นกรณีที่คุณใช้เวอร์ชันการซิงค์ใน Workers) ใช้โค้ดเรียกกลับที่ผิดพลาดในการเรียก API เสมอ พวกเขาเป็นตัวเลือกที่ไม่บังคับ แต่คุณจะไม่ต้องกังวลเรื่องความเศร้าโศกในภายหลังเมื่อเรื่องเสียหาย