재우니의 블로그

http://www.venkatbaggu.com/store-files-in-amazon-s3-using-aws-sdk-asp-net-mvc/


Whats is Amazon S3

Amazon S3 (Simple Storage Service) is an online file storage web service offered by Amazon Web Services. The S3 allows uploading, storage and downloading of practically any file or object up to five gigabytes (5 GB) in size.  To use Amazon S3, we must create a bucket to the store data. Each Buckets have the configuration properties like to make the objects accesses public or private.

S3 는 아마존의 웹 서비스 중에 온라인 파일 저장소 웹 서비스를 제공합니다. 이는 파일을 업로드하여 저장합니다. 이를 사용하기 위해서는 bucket 이라는 데이터 저장소를 생성해야 합니다. 각각의 bucket 들은 public 또는 private 형태로 객체 접근을 설정을 통해 각각 지정이 가능합니다.

Step 1: Install Amazon AWS SDK

To install AWS SDK for .NET, run the f
ollowing command in the Package Manager Console

nuget 을 통해 AWS SDK 를 설치 합니다.

1
Install-Package AWSSDK

Step 2:  Get your Access Key ID and Secret Access Key

To use AWS SDK, first you need to get your Access Key ID and Secret Access Key. You can create using the IAM console https://console.aws.amazon.com/iam/home?#home to know more about how create your access keys please check the following documentation at amazon http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSGettingStartedGuide/AWSCredentials.html.

AWS SDK 를 사용하기 위해서는 Access Key ID 그리고 Secret Access Key 가 필요합니다. 이는 IAM 콘솔을 통해 생성할 수 있습니다. 또한 문서를 통해 확인하시기 바랍니다.

Step 3: Create Bucket

Here we can create the bucket using AWS Console.
AWS 콘솔을 이용하여 bucket 을 생성하는 방법입니다.

S3 Management Console

S3 Management Console

Once the bucket is created save the bucket name in the web.config file. Also save your AWSAccessKey and AWSSecretKey in the 
web.config file.

Step 4: Using AWS SDK.Net

Upload a file using form post use the following code

A bucket can have multiple keys. A Key can store multiple objects.  In simple words Key is  folder name. Here we are using the Key name as UPLOADS.
bucket 에는 멀티 키를 가질 수 있습니다. 하나의 키는 여러개의 객체들을 저장할 수 있습니다. 간단히 말하자면, 키는 폴더 이름입니다. UPLOADS 처럼, 키 이름을 사용하는 방법 입니다.

AWS 의 S3 에서 파일경로에 파일폴더가 존재하지 않으면 자동적으로 폴더 생성하고나서 파일이 추가됩니다. 너무 좋앙~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Configuration;
using System.Web;
using System.Web.Mvc;
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
namespace AmazonAWS.Controllers
{
    public class S3Controller : Controller
    {
        private static readonly string _awsAccessKey = ConfigurationManager.AppSettings["AWSAccessKey"];
        private static readonly string _awsSecretKey = ConfigurationManager.AppSettings["AWSSecretKey"];
        private static readonly string _bucketName = ConfigurationManager.AppSettings["Bucketname"];
        public ActionResult UploadToS3(HttpPostedFileBase file)
        {
            try
            {
                IAmazonS3 client;
                using (client = Amazon.AWSClientFactory.CreateAmazonS3Client(_awsAccessKey, _awsSecretKey))
                {
                    var request = new PutObjectRequest()
                    {
                        BucketName = _bucketName,
                        CannedACL = S3CannedACL.PublicRead,//PERMISSION TO FILE PUBLIC ACCESIBLE
                        Key =  string.Format("UPLOADS/{0}", file.FileName),
                        InputStream = file.InputStream//SEND THE FILE STREAM
                    };
                    client.PutObject(request);
                }
            }
            catch (Exception ex)
            {
                
            }
            return View();
        }
    }
}