Подтвердить что ты не робот

ASP.NET MVC - загрузка изображения на Amazon S3

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

4b9b3361

Ответ 1

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);

Ответ 2

Немного подробнее о том, как использовать папки и предоставлять всем пользователям доступ только для чтения. Html:

С#

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

Ответ 3

Скорее всего, это строка с кодировкой 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
}

Ответ 4

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

                YourS3client.PutObject(request);