2010-09-23 59 views
11

Tôi có hình của tôi từ Request.Files [0]. Bây giờ, làm cách nào để tải hình ảnh này lên S3? Tôi thấy rằng trong API AWS .NET, bạn phải chỉ định ContentBody khi đặt một đối tượng là một chuỗi. Làm cách nào để lấy nội dung của tệp của tôi?ASP.NET MVC - Tải hình ảnh lên Amazon S3

Trả lời

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

Cảm ơn bit bit, xóa mọi thứ cho tôi. – Chaddeus

1

Rất có thể đây là chuỗi được mã hóa Base64, nhưng bạn nên kiểm tra tài liệu S3 để chắc chắn. Nếu có, bạn nên sử dụng Convert.ToBase64String() và chuyển nó vào mảng byte.

Dưới đây là một số mã mẫu bạn có thể thử. Tôi đã không kiểm tra nó, nhưng nó sẽ giúp bạn có được ý tưởng đúng:

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

đó không làm việc, nhưng những gì đã làm công việc đã sử dụng file.InputStream là tài sản của một InputStream Đối tượng PutObjectRequest. Cảm ơn bạn đã giúp đỡ! –

11

chi tiết Hơi hơn với cách sử dụng các thư mục và cấp tất cả người dùng truy cập chỉ đọc. 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); 
      } 

Chi tiết có sẵn ở đây: http://bradoyler.com/post/3614362044/uploading-an-image-with-aws-sdk-for-net-c

+0

Bài đăng trên blog là liên kết chết. – 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

Vui lòng thêm một số giải thích về cách hoạt động của tính năng này. –

Các vấn đề liên quan