help me some one can we unzip a file flex and we can maintain same directory structure.
A:
Refer you to previous thread on stackoverflow with some answers:
http://stackoverflow.com/questions/680593/extract-zip-file-in-flex
Best of luck!
Mark Mayo
2009-12-18 10:58:06
A:
i got the sollution, if any one wants to unzip a file just go through this code written in action script.
package 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();
}
}
}
RAVI SHANKAR.M
2009-12-24 04:30:37
A:
Ravi, your solution is very simple and clean and IT WORKS ! Many thanks !
pcfan
2010-08-14 10:03:11