2016-04-19 24 views
1

AWS SDKを使用してamazonサーバーからzipファイルをダウンロードしました.zipファイルには、pngファイルを含むもう1つのフォルダがあるフォルダがあります。アマゾンサーバーからレスポンスオブジェクトを取得したので、バイト配列として読み取って.zipファイルとして保存しました。私がzipファイルをダブルクリックすると、png files.Nowが入っているディレクトリとサブディレクトリがプログラムで解凍する必要があります。私はGZipStreamを使用して圧縮解除されたバイト配列を返します。私はこのバイト配列を保存して、私のフォルダ構造を保持できるのですか? 。ZIPファイルの解凍後に同じディレクトリ構造を取得

ボイド開始() {

UnityInitializer.AttachToGameObject (this.gameObject); 
    client = new AmazonS3Client (mAccKey, mSecretKey, mRegion); 
    Debug.Log ("Getting the presigned url\n"); 
    GetPreSignedUrlRequest request = new GetPreSignedUrlRequest(); 
    request.BucketName = mBucketName; 
    request.Key = mFileName; 
    request.Expires = DateTime.Now.AddMinutes (5); 
    request.Protocol = Protocol.HTTP; 



    GetObjectRequest requestObject = new GetObjectRequest(); 
    requestObject.BucketName = mBucketName; 
    requestObject.Key = mFileName; 
    Debug.Log ("Requesting for the " + mFileName + " contents" + "from the bucket\n" + mBucketName); 

    client.GetObjectAsync(mBucketName, mFileName, (responseObj) => 
     { 

      var response = responseObj.Response; 
      if (response.ResponseStream != null) 
      { 

       Debug.Log("Recieving response\n"); 
       using (BinaryReader bReader=new BinaryReader(response.ResponseStream)) 
       { 
        byte[] buffer = bReader.ReadBytes((int)response.ResponseStream.Length); 


        var zippedPath=Application.persistentDataPath+"/"+zippedFile; 
        File.WriteAllBytes(zippedPath,buffer); 

        var unZippedPath=Application.persistentDataPath+"/"+unZipToFolder; 
        DirectoryInfo directory=Directory.CreateDirectory(unZippedPath); 
        byte[]compressedData=compress(buffer); 

        byte[] unCompressedData=decompress(compressedData); 
        //Debug.Log(unCompressedData.Length); 
        File.WriteAllBytes(unZippedPath+directory,unCompressedData); 








       } 
       Debug.Log("Response complete"); 

      } 

     }); 
} 


#region GZipStream 
public static byte[] compress(byte[] data) 
{ 
    using (MemoryStream outStream = new MemoryStream()) 
    { 
     using (GZipStream gzipStream = new GZipStream(outStream, CompressionMode.Compress)) 
     using (MemoryStream srcStream = new MemoryStream(data)) 
      CopyTo(srcStream, gzipStream); 
     return outStream.ToArray(); 
    } 
} 


public static byte[] decompress(byte[] compressed) 
{ 
    using (MemoryStream inStream = new MemoryStream(compressed)) 
    using (GZipStream gzipStream = new GZipStream(inStream, CompressionMode.Decompress)) 
    using (MemoryStream outStream = new MemoryStream()) 
    { 
     CopyTo(gzipStream, outStream); 
     return outStream.ToArray(); 
    } 
} 

public static void CopyTo(Stream input, Stream output) 
{ 
    byte[] buffer = new byte[16 * 1024]; 
    int bytesRead; 
    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     output.Write(buffer, 0, bytesRead); 
    } 
} 

#endregion 

}

フォルダ構造zipファイルimages-内部>サンプルimages-> 10 PNGファイル

+0

いくつかのコードを追加して、読みやすいように質問を書いてください。初めてガイドライン(http://stackoverflow.com/help/how-to-ask)をお読みください; –

答えて

1

GZipStreamのみ(DE)ストリームを圧縮することができ。つまり、それを使ってフォルダ構造を復元することはできません。 ZipFileを使用するか、フレームワーク4.5を使用できない場合はSharpZipLibを使用してください。

+0

サードパーティライブラリを使用せずにやりたいです。 –

+0

私が書いたように、ZipFileはネットフレームワーク4.5の一部です。なんらかの理由で4.5を使用できない、または使用したくない場合は、サードパーティのコンポーネントを使用する必要があります。 – Nino

+0

返信いただきありがとうございます。私は.netフレームワーク4.5を使用していません。サードパーティのコンポーネントを使用して唯一のソリューションになるでしょうか? –

関連する問題