2013-12-19 90 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

IIRC,S3不理解文件夹的概念;相反,它只有很长的文件名,可以包含斜杠。这是一个平面文件系统。 – Warty

回答

3

重要的是要知道,在Amazon S3中没有Folders的概念。这些只是长的S3文件名中带有斜线,用于分组Amazon S3 Objects ..

通过发送PUT Object请求,您可以创建一个文件夹。在请求中,需要在其名称中放入“/”,然后用“/”分隔的字符串和文件大小为零。

有关详细信息: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); 

    } 
} 

对于Amazon S3的概念,如果你想区分文件和文件夹不是文件夹路径用“/”路径和文件路径获得不带“/”获得。

此外,如果你想创建文件夹名称与“/”比亚马逊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); 

    } 
}