1. 程式人生 > >AWS S3 API實現檔案上傳下載

AWS S3 API實現檔案上傳下載

近日專案需要使用AWS S3的API實現檔案的上傳和下載功能,才發現網上關於.net實現該功能的文章不多,有幾篇也都是很老版本的AWS的使用描述了,寫法和封裝的類等等都基本上報廢了。雖然這樣,但還是很感謝那幾篇文章給我指點了方向。下面我就把實現API的方法提供給大家:

Amazon S3 是一種面向 Internet 的儲存服務。Amazon S3 提供一個簡單的 Web 服務介面,可用於儲存和提取任意數量的資料,這些操作可從 Web 上的任何位置隨時執行。

Amazon Simple Storage Service (Amazon S3) 是一項面向 Internet 的儲存服務。可以通過 Amazon S3 隨時在 Web 上的任何位置儲存和檢索的任意大小的資料。可以通過 AWS 管理控制檯這一簡單直觀的 Web 介面來完成這些任務。

下圖為使用 AWS 管理控制檯進行管理

下面是.net程式碼實現,注:此API實現方法是基於AWSSDK.2.3.50.1版本實現的

1.首先必須擁有 Amazon Web Services 賬戶才能訪問此服務,目前有一定流量的適用,當流量超過之後會自動收費

2.根據提供的Access Key(訪問金鑰)和Secret Key(祕密金鑰)還有 BucketName

  private static readonly string _awsAccessKey = "Your Access Key ";

  private static readonly string _awsSecretKey = "Your Secret Key";

  private static readonly string _bucketName = "Your Bucket Name";


3.提供最基本的一個配置,這個地址是固定的

   AmazonS3Config config = new AmazonS3Config()
   {
      ServiceURL = "http://s3.amazonaws.com"
   };

4.普通上傳方法(基於MVC框架):         

        ///<summary>
        /// 上傳
        /// </summary>
        /// <param name="file"></param>
        public void Upload(HttpPostedFileBase file)
        {
            using (client = new AmazonS3Client(_awsAccessKey, _awsSecretKey, config))
            {
                var request = new PutObjectRequest()
                {
                    BucketName = _bucketName,
                    CannedACL = S3CannedACL.PublicRead,
                    Key = string.Format("UPLOADS/{0}", file.FileName),
                    InputStream = file.InputStream
                };

                client.PutObject(request);
            }
        }


其中CannedACL = S3CannedACL.PublicRead設定上傳檔案的許可權,即可讀Key則為上傳後的檔名或者唯一標示,這裡的file.FileName是包含路徑的,可以自己修改為自己希望儲存的名稱

另外兩個不用解釋了吧。哈哈,經測試,順利通過,好高興~~沒有白研究

5.下面是下載方法:

        public void Download()
        {
            using (client = new AmazonS3Client(_awsAccessKey, _awsSecretKey, config))
            {
                GetObjectRequest request = new GetObjectRequest()
                {
                    BucketName = _bucketName,
                    Key = "Test"
                };

                GetObjectResponse response = client.GetObject(request);
                response.WriteResponseStreamToFile("C:\\Users\\Documents\\backTitle.png");
            }
        }


下載方法簡單,不用多說了吧,經測試通過,哈哈~~高興

 今天先提供這些哈,還需要研究一下多執行緒上傳,改天一塊提供多執行緒上傳和其他方法。

 若有問題,還請留言,若有不對的地方,還請大俠指正