哪个Amazon S3 .NET库最有用和高效?

16

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

  1. Three Sharp
  2. LitS3

我目前在我们的 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: 由于这个问题没有得到关注,我在我的Web应用程序中集成了两个库,以查看设计上的区别。我知道这可能是浪费时间,但我真的想要一个长期解决方案。下面您将看到两个库执行相同操作的两个示例,也许这会激励你们中的一些人让我知道你们的想法。

使用Three 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();
    }

使用LITS3库:

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

为什么你不喜欢 LitS3?我使用 ThreeSharp 没有任何问题。 - lubos hasko
我对LitS3没有任何抱怨。我只是想确保我能够完全控制S3 API并且它能够高效运行。感谢您的评论。 - Geo
我虽然没有使用过LitS3,但是我非常频繁地使用ThreeSharp,并且我认为它设计得很好。 - skalb
我使用第三方选项,一个适用于C# REST的Amazon S3库。 对我很有效。 http://developer.amazonwebservices.com/connect/entry.jspa?externalID=130 - James Lawruk
3
哈!我之前写了LitS3,我非常喜欢你的代码示例,比较了这两个库。那就是我写它的原因,避免这样臃肿的代码。 - Nick Farina
我建议使用AWS SDK,它提供了完整的S3功能。我编写了自己的包装器,围绕该SDK和Azure Blob SDK,我将其用于将用户上传的文件备份到云文件存储中,并将文件的最新版本同步到每个节点(Web服务器)。我编写了这个包装器来比较Azure和S3,最终选择了Azure。https://github.com/AgentTy/General.CDN - Ty H.
3个回答

14

看起来官方库现在是'AWS SDK for .NET', 可以在这里找到: http://aws.amazon.com/sdkfornet/

似乎它包括:

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

它支持以下服务:

  • 亚马逊弹性计算云(Amazon Elastic Compute Cloud)
  • 亚马逊简单存储服务(Amazon Simple Storage Service)
  • 亚马逊虚拟私有云(Amazon Virtual Private Cloud)
  • 亚马逊简单数据库(Amazon SimpleDB)
  • 亚马逊关系型数据库服务(Amazon Relational Database Service)
  • 亚马逊云端分发(Amazon CloudFront)
  • 亚马逊简单队列服务(Amazon Simple Queue Service)
  • 亚马逊简单通知服务(Amazon Simple Notification Service)
  • 亚马逊弹性MapReduce(Amazon Elastic MapReduce)
  • 亚马逊云监视器(Amazon CloudWatch)
  • 弹性负载均衡(Elastic Load Balancing)
  • 自动扩展(Auto Scaling)

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))
                { }
            }

更新:亚马逊现已推出了自己的.NET库,包括他们的网络服务(包括S3),因此Affirma不再支持他们的库。
http://aws.amazon.com/sdkfornet/


嗨,Perhentian:你觉得Affirma的库缺乏对象设计怎么样?他们让你处理XML,难道没有其他方法吗?我是不是错过了什么?对此有什么建议吗? - Geo
嗨Geo,实际上我还没有接触过任何XML。你应该能够在几行C#代码中上传文件。看一下他们的示例项目。 - Perhentian

1

我在使用LitS3时运气更好。ThreeSharp有时会上传0字节的文件,而且对于它要解决的问题来说,它实际上有点过度工程化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接