在flex中解压缩文件?

时间:2009-12-18 10:52:15

标签: flex zip unzip

帮助我一些人可以解压缩文件flex我们可以维护相同的目录结构。

2 个答案:

答案 0 :(得分:0)

我使用了FZip,效果很好。在内部,它使用具有压缩功能的ByteArray。您可以通过将文件读入ByteArray来使用相同的技术。

答案 1 :(得分:0)

我得到了sollution,如果有人想要解压缩文件,只需通过动作脚本编写的代码。

包com.utils {     import flash.filesystem.File;     import flash.filesystem.FileMode;     import flash.filesystem.FileStream;     import flash.utils.ByteArray;     import flash.utils.CompressionAlgorithm;     import flash.utils.Endian;

public class ZIPDecoder
{
    private var source:String;
    private var fileName:String;
    private var targetpath:String;
    private var bytes:ByteArray=new ByteArray();
    public function ZIPDecoder()
    {
    this.source=source;
    this.targetpath=targetpath;
    }
     public function unzipFile(sourceFile,targetPath):void{
    var flNameLength;
    var xfldLength;
    var offset;
    var compSize;
    var uncompSize;
    var compMethod;
    var signature;  
    var zfile:File = File.applicationStorageDirectory.resolvePath(sourceFile);
    var zStream:FileStream = new FileStream();
    zStream.open(zfile, FileMode.READ);
    bytes.endian =  Endian.LITTLE_ENDIAN;
    while (zStream.position < zfile.size){
    // read fixed metadata portion of local file header
    zStream.readBytes(bytes, 0, 30);
    bytes.position = 0;
    signature = bytes.readInt();
    // if no longer reading data files, quit
    if (signature != 0x04034b50)
    {
        break;
    }
    bytes.position = 8;
    compMethod = bytes.readByte();  // store compression method (8 == Deflate)
     offset = 0;    // stores length of variable portion of metadata
    bytes.position = 26;  // offset to file name length
    flNameLength = bytes.readShort();    // store file name
    offset += flNameLength;     // add length of file name
    bytes.position = 28;    // offset to extra field length
    xfldLength = bytes.readShort();
    offset += xfldLength;    // add length of extra field
    // read variable length bytes between fixed-length header and compressed file data
    zStream.readBytes(bytes, 30, offset);
    bytes.position = 30;
    fileName = bytes.readUTFBytes(flNameLength); // read file name
    if (fileName.substr(fileName.length - 1, 1) != '/')
   {
        bytes.position = 18;
        compSize = bytes.readUnsignedInt(); // store size of compressed portion
        bytes.position = 22; // offset to uncompressed size
        uncompSize = bytes.readUnsignedInt(); // store uncompressed size

        // read compressed file to offset 0 of bytes; for uncompressed files
        // the compressed and uncompressed size is the same
        zStream.readBytes(bytes, 0, compSize);

        if (compMethod == 8 ) // if file is compressed, uncompress
        {
            bytes.uncompress(CompressionAlgorithm.DEFLATE);

        }
        writeFile(targetPath, fileName, bytes); // call outFile() to write out the file
    }

    }
    }
    public function writeFile(baseDir,fileName,data){
    var outFile:File=File.applicationStorageDirectory;
    outFile=outFile.resolvePath(baseDir+File.separator+fileName);
    var outStream:FileStream=new FileStream();
    outStream.open(outFile,FileMode.WRITE);
    outStream.writeBytes(data, 0, data.length);
    outStream.close();

    } 
    }
}