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框架):         


        ///
        /// 上传
        /// 
        /// 
        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");
            }
        }


下载方法简单,不用多说了吧,经测试通过,哈哈~~高兴

 

 今天先提供这些哈,还需要研究一下多线程上传,改天一块提供多线程上传和其他方法。

 

 若有问题,还请留言,若有不对的地方,还请大侠指正

 

你可能感兴趣的:(ASP.NET,AWS)