2013-11-01 4 views
1

Я пытаюсь загрузить файл в Amazon S3 с помощью .NET SDK. Загрузка работает отлично, за исключением того, что она добавляет default permission к загруженному файлу, который является «Частным».Загрузить файл на Amazon S3 без разрешения по умолчанию

Я хочу, чтобы разрешение на загружаемые файлы было установлено в «BucketOwnerFullControl».

Ниже мой код, и я не совсем уверен, что мне нужно сделать, чтобы он работал как таковой.

static string accessKeyID = ""; 
    static string secretAccessKey = ""; 
    static string existingBucketName = "bucket"; 

    static void Main(string[] args) 
    { 
     NameValueCollection appConfig = ConfigurationManager.AppSettings; 
     accessKeyID = appConfig["accesskey"]; 
     secretAccessKey = appConfig["secretkey"]; 

     string[] files = Directory.GetFiles("C:\\amazontestdirectory"); 

      foreach (string fileName in files) 
      { 
       try 
       { 
        TransferUtility fileTransferUtility = new TransferUtility(accessKeyID, secretAccessKey); 

        // Upload a file, file name is used as the object key name. 
        fileTransferUtility.Upload(fileName, existingBucketName); 
       } 
       catch (AmazonS3Exception s3Exception) 
       { 
        Console.WriteLine("AWS error: " + s3Exception.Message, s3Exception.InnerException); 

        //Open a file for writing 
        string errorOutputFileName = System.IO.Path.GetFullPath("C:\\amazontestdirectory\\logs\\errorLog.txt"); 

        //Get a StreamWriter class that can be used to write to the file 
        if (File.Exists(errorOutputFileName)) 
        { 
         StreamWriter objStreamWriter; 
         objStreamWriter = File.AppendText(errorOutputFileName); 
         objStreamWriter.WriteLine(); 
         objStreamWriter.WriteLine(DateTime.Now.ToString() + " - AWS error: " + s3Exception.Message, s3Exception.InnerException); 

         //Close the stream 
         objStreamWriter.Close(); 
        } 
       } 
      } 
     } 

ответ

4

Чтобы установить разрешения при использовании TransferUtility вам нужно использовать переопределение загрузки, который принимает в TransferUtilityUploadRequest. Это позволяет вам устанавливать более сложные параметры при загрузке файла.

TransferUtilityUploadRequest request = new TransferUtilityUploadRequest() 
{ 
    BucketName = existingBucketName, 
    FilePath = fileName, 
    CannedACL = S3CannedACL.BucketOwnerFullControl 
}; 

// Upload a file, file name is used as the object key name. 
fileTransferUtility.Upload(request); 
+0

Да, после дополнительных исследований я обнаружил, что мне пришлось использовать TransferUtilityUploadRequest. Сейчас все работает. –

Смежные вопросы