2011-08-12 15 views
7

Jak użyć pakietu AWS SDK do programu ASP.NET, aby przesłać plik do określonego folderu? - Mogłem przesłać pliki, określając nazwę segmentu (request.WithBucketName), ale chcę mieć możliwość przesłania pliku do określonego folderu w obrębie samego zasobnika.Prześlij plik do folderu wiadra S3 przy użyciu zestawu ASP.NET SDK

Jest to kod, który używam załadować plik do jednego wiadra:

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; 

} 

nadzieję, że ten kod będzie pomóc.

+0

Czy możesz wysłać swój kod do przesłania do wiadra? Pomoże nam to, z pomocą części folderu. –

+0

zaktualizowano kodem –

Odpowiedz

17

Aby dodać plik do folderu w zasobniku, należy zaktualizować klucz obiektu PutObjectRequest, aby uwzględnić folder przed nazwą pliku.

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 który mówi o przesyłaniu plików do folderu. Używają jednak TransferUtilityUploadRequest, ale powinien działać z PutObjectRequest. Przewiń na dół, aby zobaczyć odpowiedni przykład.

This post pokazuje, jak utworzyć folder bez przesyłania do niego pliku.

Nadzieja jest to pomocne

Edit: uaktualniony kod do korzystania z wykorzystaniem bloku zamiast dzwonić utylizować za najlepszych praktyk.

+0

W jaki sposób się nie udało? Czy możesz podać komunikaty o błędach lub wyjątki? –

+0

Łączona ścieżka nie działa, ale zrobił to FOLDER + "/" + UPLOADASFILENAME. Dzięki. –

+0

Muszę przed przesłaniem obrazu skompresować, a następnie po przesłaniu obrazu, ale jak mogę to zrobić, nie mam pojęcia, więc możesz mi pomóc – coderwill

2

wyglądać Po functionlity

1.Create obiekt AmazonS3

2.Create wiadro

3.Add nowy plik do Amazon S3

4.Get plik Amazon S3

5. Usuń plik z serwisu Amazon S3

Amazon

+0

+1 za link do dobrego artykułu. – Jonny

2

bardzo prosty sposób:

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 
     } 
    } 
} 

wystarczy umieścić swoje klucze w pliku web/app.config:

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

Można je uzyskać od was rachunku stronę w Konsola AWS. Muszą również używać cytowanych tutaj nazw, ponieważ są one wstępnie zdefiniowane przez bibliotekę AWS.

Powiązane problemy