Существует две основные библиотеки с открытым исходным кодом .net Amazon S3.
- Три острые
- LitS3
В настоящее время я использую LitS3 в нашем демонстрационном проекте MVC, но есть некоторая критика по этому поводу. Кто-нибудь здесь использовал обе библиотеки, чтобы они могли дать объективную точку зрения.
Ниже приведены некоторые примеры звонков с использованием 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:
Поскольку я должен продолжать двигаться, и нет четких указаний на то, какая библиотека более эффективна и постоянно обновляется, я реализовал шаблон хранилища с интерфейсом, который позволит мне менять библиотеку, если мне нужно, в будущее. Ниже приведен раздел созданного мною репозитория S3, который позволит мне менять библиотеки в случае необходимости:
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:
Поскольку этот вопрос не привлекает к себе внимания, я интегрировал обе библиотеки в свое веб-приложение, чтобы увидеть различия в дизайне, я знаю, что это, вероятно, время, но я действительно хочу хорошее долгосрочное решение. Ниже вы увидите два примера одного и того же действия с двумя библиотеками, возможно, это побудит некоторых из вас сообщить мне ваши мысли.
С ТРЕТЬЕЙ РЕЗКОЙ БИБЛИОТЕКОЙ:
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();
}