什么是Amazon S3 .NET Library最有用和最高效?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (78)

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

  1. 三个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>
<% } %>

由于我必须继续前进,并且没有明确指出哪些库更加有效并且保持更新,我已经实施了一个存储库模式,其中有一个接口,可以让我在将来需要时更改库。以下是我创建的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

如果你有关于这个问题的任何信息,请在评论中告诉我,我会回过头来编辑这个问题。

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

与三个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();
    }
提问于
用户回答回答于

我可以说,我们一直在使用Affirma ThreeSharp也许一年左右。我非常确定,我们第一次使用S3时,我们使用的是Amazon的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/

用户回答回答于

看起来官方库现在是' 适用于.NETAWS开发工具包 ',可以在这里找到:http : //aws.amazon.com/sdkfornet/

看起来像它包括:

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

它支持:

  • 亚马逊弹性计算云
  • 亚马逊简单存储服务
  • 亚马逊虚拟私有云
  • Amazon SimpleDB
  • 亚马逊关系数据库服务
  • 亚马逊CloudFront
  • 亚马逊简单队列服务
  • 亚马逊简单通知服务
  • Amazon Elastic MapReduce
  • Amazon CloudWatch
  • 弹性负载平衡
  • Auto Scaling

扫码关注云+社区