วันนี้จะมาสาธิตวิธีการทำให้แฟลชของเรา อ่านไฟล์ ที่อยู่ภายใน zip ด้วย actionscript3.0
จริงๆแล้วแฟลชก็สามารถสร้างไฟล์ zip ได้ แต่วันนี้จะมาทำแค่ในส่วนของการอ่านไฟล์นะครับ
อันดับแรก คลาสสำเร็วรูป สำหรับอ่านไฟล์ zip ที่เลือกใช้วันนี้คือ fzip สามารถ download ได้จาก
http://codeazur.com.br/lab/fzip/
และไฟล์ zip ตัวอย่างที่จะใช้วันนี้ sampleImage.zip
และไฟล์สคริปที่ทำสำเร็จแล้ว DONWLOAD HERE
แต่ยังไม่ต้องรีบโหลดอะไรขนาดนั้น มาอ่าน tutorial กันก่อน ทำตั้งนานไม่อ่านกันเลยหรอ
มาทำความเข้าใจกันก่อน สำหรับไฟล์ zip
สำหรับ fzip นั้น จะสามารถอ่านไฟล์ zip ที่ไม่มีการ บีบอัด
ดังนั้น เมื่อเราจะ zip ไฟล์สำหรับการทดลองครั้งนี้ จึงต้องเลือก Compress Methode เป็น store ดูตามปาภนะครับ ไฮไลท์แดงฉาน
งานนี้ผมจะใช้ FlashDevelop ในการเขียนโค้ดนะครับ
เริ่มแรกผมก็สร้าง new Project ก่อนเลยตามภาพ
เมื่อสร้างแล้วเราก็จะได้ Project เปล่าๆหน้าตาแบบนี้
จากนั้น ให้ Copy ไฟล์ fzip.swc จากคลาสที่ให้ download ด้านบน ไวที่ lib
แล้วจัดการเซ็ทให้โปรเจคของเรา รู้จัก class ในนี้ด้วยการคลิกขวา
แล้วเลือก Add To Library
แล้วก็ Copy ไฟลื zip ของเรา มาไว้ที่โฟลเดอร์ bin
ลองเปิดดูภายในจะมี jpg อยู่ 5 ไฟล์
เอาหละเริมเขียนสคริปกันซักที ตามภาพ
จากภาพ
STEP 1 จะเป็นการ import ของที่จำเป็น เข้ามา
STEP2 จะเป็นการประกาศตัวแปร Fzip
STEP 3 สร้าง instance จากคลาส และทำการสั่งโหลด
จากนั้น ขั้นตอนต่อไป
จากภาพด้านบน กำหนด Event ให้กับ zip ว่าให้โหลดเสร็จ และเมื่อโหลดเสร้จ ให้แสดงจำนวนไฟล์ ตามภาพ จะ trace ออกมา 5 ไฟล์ ตามที่เราเก็บไว้
ขั้นตอนต่อไป
แก้ไขสคริปจากของเดิม ให้เปลี่ยนเป็น อ่านชื่อไฟล์ทั้งหมดออกมา
โดยที่ var all:Number = zip.getFileCount(); คือการเริ่มนับว่ามีไฟล์กี่ไฟล์
เพื่อที่จะ loop อ่านทีละไฟล์
และ zip.getFileAt(index) จะเป็นคำสั่งที่รีเทิร์นไฟล์ ตามลำดับที่เราเลือก ออกมา
ขั้นตอนต่อไป แก้ไขสคริปตามภาพ
จากสคริปตามภาพ แก้ไขจากการอ่านชื่อไฟล์ มาเป็น ถ่ายโอน ไฟล์ ที่มาจากคลาส
FZipFile โดยข้อมูลที่ได้จะเป็น byteArray และถ่ายไปสู่ Loader และแสดงออกมา
โดยผลลัพธ์ จะได้ตามภาพข้านบน
ง่ายไหมครับ
ผมว่าวิธีนี้สามารถนำไปใช้งานได้หลากหลาย
อย่างเช่น ถ้าเราจะทำระบบสักอย่าง ที่ต้องการไฟล์หลายไฟล์ เป็น input ให้กับแฟลช
เราก็สามารถใช้ PHP สร้าง zip และส่งให้แฟลช โดยภายใน zip นี้จะบรรจุทั้งภาพ และไฟล์คอนฟิกต่างๆไว้ก็ยังได้
และสุดท้าย เราจะได้สคริปตามนี้
//===================
package
{
import deng.fzip.FZip;
import deng.fzip.FZipFile;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
/**
* …
* @author narongrit kanhanoi
*/
[SWF(height="110" , width="550")]
public class Main extends Sprite
{
private var zip:FZip;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
zip = new FZip();
var url:URLRequest = new URLRequest(“sampleImage.zip”);
zip.load(url);
zip.addEventListener(Event.COMPLETE , readfile );
}
private function readfile(e:Event):void {
var all:Number = zip.getFileCount();
for (var i:Number=0 ; i <= all-1 ; i++ ) {
var file:FZipFile = zip.getFileAt(i);
var loader:Loader = new Loader();
loader.loadBytes(file.content);
addChild(loader);
loader.x = 103 * i;
}
}
}
}
//====================
ง่ายใช้ไหมครับ
ขอเสียงปรบมือหน่อย เฮ…….










