2013-12-19 3 views
1

아래 코드는 잘 작동하는 S3에 문서를 업로드하는 코드입니다. 버킷에 폴더가 없으면 해당 폴더에 폴더를 만들고 그 폴더에 파일을 업로드하는 방법을 도울 수 있습니다.아마존 S3에 폴더를 만들 수 있습니까

try 
     { 
      TransferUtility fileTransferUtility = new 
      TransferUtility(new AmazonS3Client(Amazon.RegionEndpoint.USEast1)); 

      // Specify advanced settings/options. 
      TransferUtilityUploadRequest fileTransferUtilityRequest = new TransferUtilityUploadRequest 
      { 
       BucketName = existingBucketName, 
       FilePath = filePath, 
       StorageClass = S3StorageClass.ReducedRedundancy, 
       PartSize = 9291456, // 6 MB. 
       Key = keyName, 
       CannedACL = S3CannedACL.PublicRead 
      }; 
      fileTransferUtility.UploadDirectory("C:\\Build", existingBucketName); 
      fileTransferUtilityRequest.Metadata.Add("param1", "Value1"); 
      fileTransferUtilityRequest.Metadata.Add("param2", "Value2"); 
      fileTransferUtility.Upload(fileTransferUtilityRequest); 
      Console.WriteLine("Upload 4 completed"); 

     } 
     catch (AmazonS3Exception s3Exception) 
     { 
      Console.WriteLine(s3Exception.Message, 
           s3Exception.InnerException); 
     } 
+0

; 오히려 슬래시를 포함 할 수있는 정말 긴 파일 이름을 가지고 있습니다. 플랫 파일 시스템입니다. – Warty

답변

3

Amazon S3에는 폴더 개념이 없다는 것을 알아야합니다. 이것들은 그 안에 슬래시가있는 긴 S3 파일 이름이며, Amazon S3 Objects을 그룹화하는 데 사용됩니다.

PUT 개체 요청을 보내면 폴더를 만들 수 있습니다. 요청에서 이름에 "/"를 넣어야하고 "/"및 파일 크기로 구분 된 문자열은 0입니다. 자세한 내용은

: Amazon S3 - How to Create a Folder?

1
public void CreateFolder(string awsBucketName, string awsFolderName) 
{ 
    EncryptionMaterials encryptionMaterials = new EncryptionMaterials(RSA.Create()); 

    AmazonS3EncryptionClient client = new AmazonS3EncryptionClient(encryptionMaterials); 
     if ((cloudKaseClient != null) & (_Security.IsTokenAuthenticate(tokenUsr, tokenPasswd))) 
     { 
      PutObjectRequest putObjectRequest = new PutObjectRequest 
      { 

       BucketName = awsBucketName, 
       StorageClass = S3StorageClass.Standard, 
       ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256, 
       CannedACL = S3CannedACL.Private, 
       Key = awsFolderName + "/", 
       ContentBody = awsFolderName 
      }; 

      client.PutObject(putObjectRequest); 

    } 
} 

아마존 S3의 개념이 "/"로 경로 및 "/"없이 얻을 파일 경로를 얻을 폴더 경로에 비해 파일 및 폴더를 구분합니다.

또한 아마존 s3 브라우저보다 "/"로 폴더 이름을 만들려면 "/"없이 해당 폴더를 만드십시오.

코드 아래 파일 생성 사용에 대한

IIRC는, S3 폴더의 개념을 이해하지 못하는
public void CreateFile(string awsBucketName, string awsFolderName) 
{ 
    EncryptionMaterials encryptionMaterials = new EncryptionMaterials(RSA.Create()); 

    AmazonS3EncryptionClient client = new AmazonS3EncryptionClient(encryptionMaterials); 
     if ((cloudKaseClient != null) & (_Security.IsTokenAuthenticate(tokenUsr, tokenPasswd))) 
     { 
      PutObjectRequest putObjectRequest = new PutObjectRequest 
      { 

       BucketName = awsBucketName, 
       StorageClass = S3StorageClass.Standard, 
       ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256, 
       CannedACL = S3CannedACL.Private, 
       Key = awsFolderName, 
       ContentBody = awsFolderName 
      }; 

      client.PutObject(putObjectRequest); 

    } 
} 
관련 문제