有两个主要的开源.net亚马逊S3库。
我目前在我们的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
如果你有任何关于这个问题的信息,请在评论中告诉我,我会回来编辑这个问题。
EDIT 2:由于这个问题没有得到关注,我在我的web应用程序中集成了这两个库,以查看设计上的差异,我知道这可能是时间上的差距,但我真的想要一个好的长期解决方案。下面你会看到两个库的相同动作的两个示例,也许这会激励你们中的一些人让我知道你们的想法。
有三个锐化库:
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();
}
发布于 2010-04-29 03:13:32
看起来官方的库现在是'AWS for .NET',可以在这里找到:http://aws.amazon.com/sdkfornet/
看起来它包括:
库代码
它支持:
SimpleDB
发布于 2009-09-15 20:08:24
我可以插话说,我们使用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不再支持他们的库。
发布于 2009-10-08 20:50:57
我和LitS3的关系更好。ThreeSharp one有时会上传0字节的文件,坦率地说,对于它正在解决的问题来说,它有点过度设计了。
https://stackoverflow.com/questions/1415833
复制相似问题