2013-03-11 3 views
1

아마존 S3에 폴더를 만들어야합니다. 이제 해당 폴더를 zip 파일로 변환해야합니다. DotNetZip Liberary를 사용하여 .zip 파일로 변환했습니다. 여기에 내가 오류를 보여주는 코드를 실행하면 그아마존 S3에서 zip 폴더 만들기

http://dotnetzip.codeplex.com/wikipage?title=CS-Examples

public void ConvertToZip(string directoryToZip, string zipFileName) 
{ 
    try 
    { 

     using (client = DisposableAmazonClient()) 
     { 
      var sourDir = new S3DirectoryInfo(client, bucket, directoryToZip); 

      var destDir = new S3DirectoryInfo(client, bucket, CCUrlHelper.BackupRootFolderPhysicalPath); 

      using (var zip = new ZipFile()) 
      { 
       zip.AddDirectory(sourDir.FullName); // recurses subdirectories 
       zip.Save(Path.Combine(destDir.FullName, zipFileName)); 
      } 
     } 

     logger.Fatal("Successfully converted to Zip."); 
    } 
    catch (Exception ex) 
    { 
     logger.Error("Error while converting to zip. Error : " + ex.Message); 
    } 
} 

에 대한 링크는 "주어진 경로의 형식이 지원되지는."

답변

2

S3DirectoryInfo는 디렉터리 구조를 에뮬레이트하지만 실제 디렉터리 구조는 아니며 DotNetZip은 S3에서 개체를 가리키는 문자열을 처리하는 방법을 알지 못합니다. 이 작업을 수행하려면 파일을 다운로드하고 압축 한 다음 생성 된 zip 파일을 업로드해야합니다. 어떻게 할 수 있는지 보여주는 몇 가지 샘플 코드가 있습니다.

 
class Program 
{ 
    static void Main(string[] args) 
    { 
     var zipFilename = @"c:\temp\data.zip"; 
     var client = new AmazonS3Client(); 
     S3DirectoryInfo rootDir = new S3DirectoryInfo(client, "norm-ziptest"); 
     using (var zip = new ZipFile()) 
     { 
      zip.Name = zipFilename; 
      addFiles(zip, rootDir, ""); 
     }

// Move local zip file to S3 
    var fileInfo = rootDir.GetFile("data.zip"); 
    fileInfo.MoveFromLocal(zipFilename); 
} 

static void addFiles(ZipFile zip, S3DirectoryInfo dirInfo, string archiveDirectory) 
{ 

    foreach (var childDirs in dirInfo.GetDirectories()) 
    { 
     var entry = zip.AddDirectoryByName(childDirs.Name); 
     addFiles(zip, childDirs, archiveDirectory + entry.FileName); 
    } 

    foreach (var file in dirInfo.GetFiles()) 
    { 
     using (var stream = file.OpenRead()) 
     {      
      zip.AddEntry(archiveDirectory + file.Name, stream); 

      // Save after adding the file because to force the 
      // immediate read from the S3 Stream since 
      // we don't want to keep that stream open. 
      zip.Save(); 
     } 
    } 
} 

}

관련 문제