2017-04-08 361 views
1

我有一個用C#編寫的Lambda函數,嘗試將對象上傳到S3存儲桶失敗。出於測試目的,我將輸入字符串轉換爲字節數組並將其用作對象內容。我的處理函數的定義如下:AWS Lambda C#將對象上傳到S3

public void FunctionHandler(string input, ILambdaContext context) 
{ 
    IAmazonS3 client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1); 

    byte[] bytes = new byte[input.Length * sizeof(char)]; 
    Buffer.BlockCopy(input.ToCharArray(), 0, bytes, 0, bytes.Length); 

    using (MemoryStream ms = new MemoryStream()) 
    { 
     foreach (Byte b in bytes) 
     { 
      ms.WriteByte(b); 
     } 

     PutObjectRequest request = new PutObjectRequest() 
     { 
      BucketName = "BUCKET_NAME", 
      Key = "OBJECT_KEY", 
      InputStream = ms 
     }; 

     client.PutObjectAsync(request); 
    } 
} 

功能無差錯運行,但對象不會寫入到S3。我覺得這可能與PutObjectAsync方法有關,但我不積極。該IAmazonS3接口包括PutObject方法,而是企圖用這種方法我收到以下錯誤時:

'IAmazonS3' does not contain a definition for 'PutObject'

什麼是載對象的S3存儲在C#lambda函數的最佳方式?

回答

2

這是我使用C#lambda函數將S3對象放到S3中的幫助器函數(以及它的工作原理)。您可能可以將其作爲您的起點。

不知道爲什麼你正在你的字符串轉換爲字節,並在C#/λ您需要使用PutObjectAsync方法,而不是PutObject方法:

public static async Task<bool> PutS3Object(string bucket, string key, string content) 
     { 
      try 
      { 
       using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) 
       { 
        var request = new PutObjectRequest 
        { 
         BucketName = bucket, 
         Key = key, 
         ContentBody = content 
        }; 
        var response = await client.PutObjectAsync(request); 
       } 
       return true; 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Exception in PutS3Object:" + ex.Message); 
       return false; 
      } 
     } 
1

你應該申請等待與異步

await client.PutObjectAsync(request);