ASP.NET MVC - загрузка изображения в Amazon S3 - PullRequest
11 голосов
/ 23 сентября 2010

У меня есть изображение из Request.Files [0].Теперь, как мне загрузить это изображение в S3?Я вижу, что в AWS .NET API вы должны указывать ContentBody при размещении объекта, который является строкой.Как бы я получить тело содержимого моего файла?

Ответы [ 4 ]

17 голосов
/ 23 сентября 2010
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);
11 голосов
/ 08 марта 2011

Немного подробнее о том, как использовать папки и предоставить всем пользователям доступ только для чтения.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);
            }

Более подробная информация доступна здесь: http://bradoyler.com/post/3614362044/uploading-an-image-with-aws-sdk-for-net-c

1 голос
/ 23 сентября 2010

Скорее всего, это строка в кодировке Base64, но вы должны проверить документацию S3, чтобы быть уверенным.Если это так, вы должны использовать Convert.ToBase64String () и передать ему байтовый массив.

Вот пример кода, который вы можете попробовать.Я не проверял это, но это должно помочь вам получить правильное представление:

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 голосов
/ 03 октября 2016
                PurObjectRequest request = new PutObjectRequest()
                {
                    BucketName = _bucketName,
                    CannedACL = S3CannedACL.PublicRead,
                    Key =  string.Format("folderyouwanttoplacethefile/{0}", file.FileName),
                    InputStream = file.InputStream
                };

                YourS3client.PutObject(request);
...