什么是亚马逊S3 .NET库最有用和最有效的?

时间:2009-09-12 18:52:41

标签: .net asp.net-mvc amazon-s3

有两个主要的开源.net Amazon S3库。

  1. Three Sharp
  2. LitS3
  3. 我目前在MVC演示项目中使用LitS3,但有一些批评。这里有没有人使用这两个库,所以他们可以给出一个客观的观点。

    使用LitS3进行一些示例调用:

    在演示控制器上:

        private S3Service s3 = new S3Service()
        {
            AccessKeyID = "Thekey",
            SecretAccessKey = "testing"
        };
    
        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";
    
            return View("Index",s3.GetAllBuckets());
        }
    

    在演示视图中:

    <% foreach (var item in Model)
       { %>
       <p>
        <%= Html.Encode(item.Name) %>
       </p>
    <% } %>
    

    编辑1:

    由于我必须继续前进并且没有明确指示哪个库更有效并保持更新,我已经实现了一个存储库模式,其中包含一个接口,如果我需要,我可以更改库未来。下面是我创建的S3Repository的一部分,如果需要,我将允许我更改库:

    using LitS3;
    
    namespace S3Helper.Models
    {
      public class S3Repository : IS3Repository
      {
        private S3Service _repository;
        #region IS3Repository Members
    
        public IQueryable<Bucket> FindAllBuckets()
        {
            return _repository.GetAllBuckets().AsQueryable();
        }
    
        public IQueryable<ListEntry> FindAllObjects(string BucketName)
        {
            return _repository.ListAllObjects(BucketName).AsQueryable();
        }
    
        #endregion
    

    如果您有关于此问题的任何信息,请在评论中告诉我,我会回来并编辑问题。

    编辑2: 由于这个问题没有得到关注,我在我的网络应用程序中集成了两个库以查看设计上的差异,我知道这可能是时间的一部分,但我真的想要一个好的长期解决方案。下面你将看到两个与两个库相同动作的样本,也许这会激励你们中的一些让我知道你的想法。

    有三个SHARP图书馆:

        public IQueryable<T> FindAllBuckets<T>()
        {
            List<string> list = new List<string>();
    
            using (BucketListRequest request = new BucketListRequest(null))
            using (BucketListResponse response = service.BucketList(request))
            {
                XmlDocument bucketXml = response.StreamResponseToXmlDocument();
                XmlNodeList buckets = bucketXml.SelectNodes("//*[local-name()='Name']");
                foreach (XmlNode bucket in buckets)
                {
                    list.Add(bucket.InnerXml);
                }
            }
            return list.Cast<T>().AsQueryable();
        }
    

    WITH LITS3 LIBRARY:

        public IQueryable<T> FindAllBuckets<T>()
        {
            return _repository.GetAllBuckets()
                .Cast<T>()
                .AsQueryable();
        }
    

3 个答案:

答案 0 :(得分:14)

看起来官方库现在是“ AWS SDK for .NET ”,可在此处找到:http://aws.amazon.com/sdkfornet/

看起来包括:

  • 代码示例
  • Visual Studio集成
  • .NET库代码

它支持:

  • Amazon Elastic Compute Cloud
  • 亚马逊简单存储服务
  • 亚马逊虚拟私有云
  • Amazon SimpleDB
  • 亚马逊关系数据库服务
  • Amazon CloudFront
  • 亚马逊简单队列服务
  • 亚马逊简单通知服务
  • Amazon Elastic MapReduce
  • Amazon CloudWatch
  • Elastic Load Balancing
  • Auto Scaling

答案 1 :(得分:4)

我可以说我们使用Affirma ThreeSharp大概一年左右。我很确定我们第一次使用S3时,我们使用的是亚马逊的SOAP库,这肯定不像Affirma的ThreeSharp那么简单。

我发现它非常可靠,即使在批处理工作和上传/下载大量数据时也是如此。项目似乎没有那么多更新,但是我们觉得它不需要更新!

代码示例: 这样的东西会上传一个文件:

m_config = new ThreeSharpConfig
                           {
                               AwsAccessKeyID = Core.ConfigSettings.AmazonS3AccessKey,
                               AwsSecretAccessKey = Core.ConfigSettings.AmazonS3SecretAccessKey,
                               ConnectionLimit = 40,
                               IsSecure = true

                           };
            m_service = new ThreeSharpQuery(m_config);



 using (var request = new ObjectAddRequest(amazonS3BucketName, fileName.Replace(' ', '_')))
            {
                request.Headers.Add("x-amz-acl", "public-read-write");
                request.LoadStreamWithBytes(fileData);

                if (redirectUrl != null)
                {
                    request.RedirectUrl = redirectUrl;
                }

                using (ObjectAddResponse response = m_service.ObjectAdd(request))
                { }
            }

编辑:亚马逊现在已经为他们的网络服务(包括S3)推出了自己的.Net库,因此Affirma不再支持他们的图书馆了。
http://aws.amazon.com/sdkfornet/

答案 2 :(得分:1)

我对LitS3的运气好转。 ThreeSharp正在不时上传带有0个字节的文件,坦率地说它正在解决它所解决的问题。