2010-09-23 27 views
11

Resmimi Request.Files [0] 'dan aldım. Şimdi, bu resmi S3'e nasıl yüklerim? AWS .NET API'sinde, string olan bir nesneyi yerleştirirken ContentBody'yi belirtmeniz gerektiğini görüyorum. Dosyamın içerik gövdesini nasıl alabilirim?ASP.NET MVC - Amazon S3'e görüntü yükleme

cevap

16
var file = Request.Files[0]; 
PutObjectRequest request = new PutObjectRequest(); 
request.BucketName = "mybucket" 
request.ContentType = contentType; 
request.Key = key; 
request.InputStream = file.InputStream; 
s3Client.PutObject(request); 
+0

Kod biti için teşekkürler, benim için de bazı şeyleri temizler. – Chaddeus

1

Büyük olasılıkla bu bir Base64 kodlu dizedir, ancak emin olmak için S3 belgelerini kontrol etmelisiniz. Öyleyse, Convert.ToBase64String() kullanmalı ve bayt dizisini geçirmelisiniz.

İşte deneyebileceğiniz bazı örnek kod. Bunu test etmedim ama doğru bir fikir edinmek yardımcı olacaktır: klasörleri kullanmak ve tüm kullanıcıların salt okunur erişim izni nasıl

if (Request.Files.Count >= 1) { 
    var file = Request.Files[0]; 
    var fileContents = new byte[file.ContentLength]; 
    file.InputStream.Read(fileContents, 0, file.ContentLength); 
    var fileBase64String = Convert.ToBase64String(fileContents); 

    // now you can send fileBase64String to the S3 uploader 
} 
+0

işe yaramadı Yani, ancak yaptığımız çalışmalar a inputStream özelliği olarak file.InputStream kullanılarak ne PutObjectRequest nesnesi. Yardım ettiğin için teşekkür ederim! –

11

Biraz daha detay. Html:

C#

HttpPostedFileBase file = Request.Files[0]; 
    if (file.ContentLength > 0) // accept the file 
     { 
      string accessKey = "XXXXXXXXXXX"; 
      string secretKey = "122334XXXXXXXXXX"; 
      AmazonS3 client; 
      using (client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey)) 
      { 
       MemoryStream ms = new MemoryStream(); 
       PutObjectRequest request = new PutObjectRequest(); 
     request.WithBucketName("mybucket") 
    .WithCannedACL(S3CannedACL.PublicRead) 
    .WithKey("testfolder/test.jpg").InputStream = file.InputStream; 
     S3Response response = client.PutObject(request); 
      } 

Daha detay için mevcuttur: http://bradoyler.com/post/3614362044/uploading-an-image-with-aws-sdk-for-net-c

+0

Blog yayınının bağlantısı kesildi. – swbradshaw

0
   PurObjectRequest request = new PutObjectRequest() 
       { 
        BucketName = _bucketName, 
        CannedACL = S3CannedACL.PublicRead, 
        Key = string.Format("folderyouwanttoplacethefile/{0}", file.FileName), 
        InputStream = file.InputStream 
       }; 

       YourS3client.PutObject(request); 
+0

Lütfen bunun nasıl çalıştığı hakkında biraz açıklama ekleyin. –