2011-08-12 75 views
7

如何使用AWS SDK for ASP.NET將文件上傳到特定文件夾? - 我可以通過指定存儲桶名稱(request.WithBucketName)來上傳文件,但我希望能夠將文件上傳到存儲桶本身內的特定文件夾。使用ASP.NET SDK將文件上傳到S3存儲桶的文件夾

這是我用它來上傳文件到單個桶代碼:

public bool UploadFileToS3(string uploadAsFileName, Stream ImageStream, S3CannedACL filePermission, S3StorageClass storageType, string toWhichBucketName) 
{ 

    try 
    { 
     client = Amazon.AWSClientFactory.CreateAmazonS3Client(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY); 
     PutObjectRequest request = new PutObjectRequest(); 
     request.WithKey(uploadAsFileName); 
     request.WithInputStream(ImageStream); 
     request.WithBucketName(toWhichBucketName); 
     request.CannedACL = filePermission; 
     request.StorageClass = storageType; 

     client.PutObject(request); 
     client.Dispose(); 
    } 
    catch 
    {    
     return false; 
    } 
    return true; 

} 

希望這個代碼將幫助你。

+0

你可以發佈你的代碼上傳到存儲桶嗎?這將幫助我們,幫助你,與文件夾部分。 –

+0

更新了代碼 –

回答

17

要將文件添加到存儲桶中的文件夾,您需要更新PutObjectRequest的密鑰以在文件名之前包含該文件夾。

public bool UploadFileToS3(string uploadAsFileName, Stream ImageStream, S3CannedACL filePermission, S3StorageClass storageType, string toWhichBucketName) 
{ 
    try 
    { 
     using(client = Amazon.AWSClientFactory.CreateAmazonS3Client(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY)) 
     { 
      PutObjectRequest request = new PutObjectRequest(); 
      request.WithKey("folder" + "/" + uploadAsFileName); 
      request.WithInputStream(ImageStream); 
      request.WithBucketName(toWhichBucketName); 
      request.CannedACL = filePermission; 
      request.StorageClass = storageType; 

      client.PutObject(request); 
     } 
    } 
    catch 
    {    
     return false; 
    } 
    return true; 
} 

This post說的是上傳文件到文件夾。儘管它們正在使用TransferUtilityUploadRequest,但它應該與PutObjectRequest一起使用。滾動到相關示例的底部。

This post顯示瞭如何創建文件夾而無需上傳文件。

希望這是有益

編輯: 更新,而不是使用每調用最佳實踐配置一個使用的代碼塊。

+0

它是如何失敗的?你能提供錯誤信息或異常嗎? –

+0

組合的路徑無法使用,但是FOLDER +「/」+ UPLOADASFILENAME做到了。謝謝。 –

+0

我需要之前上傳圖片壓縮,然後上傳圖片後,但如何能做到這一點,我還沒有想法,所以你可以請幫我 – coderwill

2

樣子繼functionlity

1,創建一個AmazonS3對象

2.創建一個水桶

3.添加一個新的文件到Amazon S3

4.Get從文件Amazon S3

5.從Amazon S3刪除文件

Amazon

+0

+1鏈接到一篇好文章。 – Jonny

2

超級簡單的方法:

using System; 
using System.Web; 
using Amazon; 
using Amazon.S3; 
using Amazon.S3.Model; 
using System.Configuration; 

/// <summary> 
/// Summary description for AWShandler 
/// </summary> 
public static class AWSHandler 
{ 
    public static void sendFileToS3(string fileName, string storeLocation) 
    { 
     try 
     { 
      AmazonS3Client client = new AmazonS3Client(RegionEndpoint.EUWest1); 
      PutObjectRequest request = new PutObjectRequest(); 
      request.BucketName = ConfigurationManager.AppSettings["AWSBucket"].ToString(); 
      request.FilePath = fileName; 
      request.Key = storeLocation + fileName; 
      request.ContentType = MimeMapping.GetMimeMapping(fileName); 
      PutObjectResponse response = client.PutObject(request); 
     } 
     catch (Exception ex) 
     { 
      // use a logger and handle it 
     } 
    } 
} 

你只需要把你的鑰匙在web/app.config文件:

<add key="AWSAccessKey" Value="yourKey" /> 
<add key="AWSSecretKey" Value="yourSecret" /> 

這些可以得到從你的帳戶頁面AWS控制檯。它們也必須使用這裏引用的名稱,因爲它們是由AWS庫預先定義的。

相關問題