วันนี้จะมาสาธิตวิธีการทำให้แฟลชของเรา อ่านไฟล์ ที่อยู่ภายใน 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 ดูตามปาภนะครับ ไฮไลท์แดงฉาน

howtozip

งานนี้ผมจะใช้ FlashDevelop ในการเขียนโค้ดนะครับ

เริ่มแรกผมก็สร้าง new Project ก่อนเลยตามภาพ

zipstep1

เมื่อสร้างแล้วเราก็จะได้ Project เปล่าๆหน้าตาแบบนี้

zipstep2

จากนั้น ให้ Copy ไฟล์ fzip.swc จากคลาสที่ให้ download ด้านบน ไวที่ lib

zipstep3

แล้วจัดการเซ็ทให้โปรเจคของเรา รู้จัก class ในนี้ด้วยการคลิกขวา
แล้วเลือก Add To Library

zipstep4

แล้วก็ Copy ไฟลื zip ของเรา มาไว้ที่โฟลเดอร์ bin

ลองเปิดดูภายในจะมี jpg อยู่ 5 ไฟล์

zipstep5

เอาหละเริมเขียนสคริปกันซักที ตามภาพ

step6

จากภาพ
STEP 1 จะเป็นการ import ของที่จำเป็น เข้ามา
STEP2 จะเป็นการประกาศตัวแปร Fzip
STEP 3 สร้าง instance จากคลาส และทำการสั่งโหลด

จากนั้น ขั้นตอนต่อไป

zipstep6

จากภาพด้านบน กำหนด Event ให้กับ zip ว่าให้โหลดเสร็จ และเมื่อโหลดเสร้จ ให้แสดงจำนวนไฟล์ ตามภาพ จะ trace ออกมา 5 ไฟล์ ตามที่เราเก็บไว้

ขั้นตอนต่อไป

zipstep7

แก้ไขสคริปจากของเดิม ให้เปลี่ยนเป็น อ่านชื่อไฟล์ทั้งหมดออกมา
โดยที่  var all:Number = zip.getFileCount();  คือการเริ่มนับว่ามีไฟล์กี่ไฟล์
เพื่อที่จะ loop อ่านทีละไฟล์

และ zip.getFileAt(index) จะเป็นคำสั่งที่รีเทิร์นไฟล์ ตามลำดับที่เราเลือก ออกมา

ขั้นตอนต่อไป แก้ไขสคริปตามภาพ

zipstep8

จากสคริปตามภาพ แก้ไขจากการอ่านชื่อไฟล์ มาเป็น ถ่ายโอน ไฟล์ ที่มาจากคลาส
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;

}

}

}

}

//====================

ง่ายใช้ไหมครับ

ขอเสียงปรบมือหน่อย เฮ…….