ระบบไฟล์ HTML5 เป็น API ที่มีประสิทธิภาพ พลังมาพร้อมความซับซ้อน ซึ่งมีความซับซ้อน ความยุ่งยากในการแก้ไขข้อบกพร่องก็จะเพิ่มขึ้นด้วย เป็นที่น่าเสียใจที่ DevTools ของ Chrome ยังไม่รองรับ Filesystem API ในตอนนี้ ทำให้การแก้ไขข้อบกพร่องยากกว่าที่ควรจะเป็น สิ่งที่ทำได้ยากคือฉันต้องเขียนโค้ดเพื่อแสดง/นำไฟล์ในระบบออก
ระหว่างการทำงานกับ Filesystem API ผมได้เคล็ดลับ 2-3 ข้อจากที่เคยคิดว่าจะส่งต่อให้ แต่ละเคล็ดลับมีขีดจำกัดของตัวเอง แต่การใช้เคล็ดลับเหล่านี้ร่วมกันจะทำให้คุณได้รับ 90% จากทั้งหมด นี่คือ 5 อันดับแรก
ตรวจสอบว่าคุณไม่ได้เรียกใช้จาก
file://
เกมนี้แหละที่ใครๆ ก็เคยเจอ Chrome กำหนดข้อจำกัดหลักด้านความปลอดภัยในfile://
API ไฟล์ขั้นสูงหลายรายการ (BlobBuilder
,FileReader
, Filesystem API,...) แสดงข้อผิดพลาดหรือล้มเหลวโดยไม่มีการแจ้งเตือนหากคุณเรียกใช้แอปในเครื่องจากfile://
หากคุณไม่มีเว็บเซิร์ฟเวอร์อยู่กับตัว คุณอาจเริ่มใช้ Chrome ด้วยแฟล็ก--allow-file-access-from-files
เพื่อข้ามข้อจำกัดด้านความปลอดภัยนี้ โปรดใช้แฟล็กนี้สำหรับการทดสอบเท่านั้นSECURITY_ERR
หรือQUOTA_EXCEEDED_ERR
ที่น่ากลัว กรณีนี้มักเกิดขึ้นเมื่อพยายามเขียนข้อมูล แต่คุณอยู่ภายใต้อิทธิพลของ #1 หากไม่เป็นเช่นนั้น อาจเป็นไปได้ว่าคุณไม่มีโควต้า โควต้าที่ใช้เปิดระบบไฟล์ได้มี 2 ประเภท ได้แก่TEMPORARY
หรือPERSISTENT
หากคุณใช้แบบหลัง ผู้ใช้จะต้องให้สิทธิ์พื้นที่เก็บข้อมูลถาวรแก่แอปของคุณอย่างชัดแจ้ง ดูวิธีดำเนินการจากโพสต์นี้FTW URL ของ
filesystem:
วิธีเปิด URLfilesystem:
สำหรับรากDirectoryEntry
ของต้นทางของแอปนั้นมีประโยชน์ นั่นหมายความว่าอย่างไร ตัวอย่างเช่น หากแอปอยู่ในwww.example.com
ให้เปิดfilesystem:http://www.example.com/temporary/
ในแท็บใหม่ Chrome จะแสดงรายการแบบอ่านอย่างเดียวของไฟล์/โฟลเดอร์ที่จัดเก็บต้นทางของแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับ URL ของfilesystem:
ได้ที่ https://www.html5rocks.com/en/tutorials/file/filesystem/#toc-filesystemurlschrome://settings/cookies
เป็นเพื่อนของคุณ หน้านี้ช่วยให้คุณป้อนข้อมูลที่เก็บไว้สำหรับต้นทางได้ ซึ่งรวมถึงพื้นที่เก็บข้อมูลฐานข้อมูล, AppCache, คุกกี้, localStorage และสิ่งต่างๆ ใน FileSystem API แต่ขอให้เตือนไว้ก่อนว่าทั้งหมดหรืออะไรก็ตาม คุณจะนำไฟล์หรือข้อมูลชิ้นเดียวออกไม่ได้อย่าลืมการเรียกกลับที่มีข้อผิดพลาด Filesystem API ทำงานในระบบที่ไม่พร้อมกัน (ยกเว้นกรณีที่คุณใช้เวอร์ชันการซิงค์ใน Workers) ใช้โค้ดเรียกกลับที่ผิดพลาดในการเรียก API เสมอ พวกเขาเป็นตัวเลือกที่ไม่บังคับ แต่คุณจะไม่ต้องกังวลเรื่องความเศร้าโศกในภายหลังเมื่อเรื่องเสียหาย