Cloud Storage

หากคุณโฮสต์แอปพลิเคชันบน App Engine คุณสามารถใช้บริการพื้นที่เก็บข้อมูลระบบคลาวด์เพื่อให้ผู้ใช้บันทึก โหลด แชร์ และเผยแพร่โปรแกรมได้

การตั้งค่า App Engine

วัตถุประสงค์แรกคือการทําให้สําเนา Runly ทํางานบน App Engine ของคุณเอง

  1. ดาวน์โหลดและติดตั้ง Python SDK
  2. เข้าสู่ระบบ Google App Engine และสร้างแอปพลิเคชัน
  3. แก้ไข appengine/app.yaml และเปลี่ยนรหัสแอปพลิเคชันจาก blockly-demo เป็นชื่อแอปพลิเคชันที่คุณสร้างขึ้นในขั้นตอนก่อนหน้า
  4. คัดลอก (หรือลิงก์ทําเครื่องหมาย) ไฟล์และไดเรกทอรีต่อไปนี้ลงใน appengine/static/
    • demos/
    • msg/
    • media/
    • *_compressed.js
  5. ไม่บังคับ: หากต้องการใช้ blockly_uncompressed.js บนเซิร์ฟเวอร์ ให้คัดลอกไฟล์นั้นไปยัง appengine/static/ และคัดลอก core ลงใน appengine/static/
  6. ไม่บังคับ: หากต้องการเรียกใช้ Playly Playground คุณจะต้องคัดลอกไดเรกทอรี blocks, generators และ tests รวมถึงไฟล์ในขั้นตอนที่ 5
  7. เรียกใช้ Google App Engine Launcher จาก GUI, เพิ่มไดเรกทอรี appengine เป็นแอปพลิเคชันที่มีอยู่ และกดปุ่ม "Deploy" หากต้องการใช้บรรทัดคําสั่ง ให้เรียกใช้: appcfg.py --oauth2 update appengine/

เมื่ออัปโหลดบล็อกแล้ว คุณสามารถชี้เบราว์เซอร์ไปยัง URL ที่คุณสร้างในขั้นตอนที่ 2 คุณควรเห็นรายการสาธิต รวมถึงการสาธิตพื้นที่เก็บข้อมูลระบบคลาวด์

พูดคุยกับระบบคลาวด์

ตรวจสอบแหล่งที่มาของการสาธิตพื้นที่เก็บข้อมูล ที่ demos/storage/index.html และสังเกตฟีเจอร์ต่อไปนี้ ตัวอย่างแรก มีสคริปต์ที่โหลด Cloud Storage API ดังนี้

<script src="/storage.js"></script>

โปรดทราบว่าสคริปต์นี้จะถือว่ามีพื้นที่ทํางานขนาดบล็อกเพียงหน้าเดียวในหน้าเว็บ นอกจากนี้ยังมีคําจํากัดความของข้อความ ซึ่งคุณควรแก้ไขตามต้องการ

BlocklyStorage.HTTPREQUEST_ERROR = 'There was a problem with the request.\n';
BlocklyStorage.LINK_ALERT = 'Share your blocks with this link:\n\n%1';
BlocklyStorage.HASH_ERROR = 'Sorry, "%1" doesn\'t correspond with any saved Blockly file.';
BlocklyStorage.XML_ERROR = 'Could not load your saved file.\n' +
    'Perhaps it was created with a different version of Blockly?';

คุณดูการแปลข้อความเหล่านี้เป็นภาษาอื่นๆ ได้ใน Blockly Games ในไดเรกทอรี JSON

การบันทึกบล็อกปัจจุบันเป็นการเรียกใช้ BlocklyStorage.link() ครั้งเดียว:

<button onclick="BlocklyStorage.link()">Save Blocks</button>

หากต้องการคืนค่าบล็อกที่บันทึกไว้เมื่อโหลดหน้าเว็บ เพียงเรียก BlocklyStorage.retrieveXml ด้วยแฮชของ URL หลังจากแทรกการบล็อกของlyly แล้ว

if ('BlocklyStorage' in window && window.location.hash.length > 1) {
  BlocklyStorage.retrieveXml(window.location.hash.substring(1));
}

พื้นที่เก็บข้อมูลในเครื่อง

storage.js API ยังมีความสามารถในการบันทึกบล็อกชุดเดียวในพื้นที่เก็บข้อมูลของเบราว์เซอร์ด้วย ซึ่งอาจนําไปใช้แทนพื้นที่เก็บข้อมูลระบบคลาวด์หรือนอกเหนือจากพื้นที่เก็บข้อมูลระบบคลาวด์ (แต่หากเป็นกรณีหลัง ก็จะต้องระมัดระวังเรื่องพื้นที่เก็บข้อมูลทั้ง 2 ประเภทที่พยายามกู้คืนพร้อมกัน)

หากต้องการกู้คืนการบล็อกจากพื้นที่เก็บข้อมูลในเครื่อง โปรดโทรหา BlocklyStorage.restoreBlocks ในหมดเวลาทันทีหลังจากที่บล็อก Blockly

setTimeout(BlocklyStorage.restoreBlocks, 0);

หากต้องการสํารองข้อมูลบล็อกลงในพื้นที่เก็บข้อมูลในเครื่องโดยอัตโนมัติเมื่อผู้ใช้ออกจากหน้าเว็บ ให้เรียกใช้ BlocklyStorage.backupOnUnload และจะบันทึก Listener เหตุการณ์เกี่ยวกับเหตุการณ์ยกเลิกการโหลดของหน้าเว็บ

BlocklyStorage.backupOnUnload();

ตัวอย่าง

การสาธิตการใช้งานจริงสําหรับพื้นที่เก็บข้อมูลระบบคลาวด์