2009-09-12 18 views
17

Có hai thư viện Amazon S3 nguồn mở chính.Thư viện IBM S3 .NET nào hữu ích và hiệu quả nhất?

  1. Three Sharp
  2. LitS3

Tôi hiện đang sử dụng LitS3 trong dự án trình diễn MVC của chúng tôi, nhưng có một số lời chỉ trích về điều đó. Có ai ở đây sử dụng cả hai thư viện để họ có thể đưa ra một quan điểm khách quan.

Dưới đây một số cuộc gọi mẫu sử dụng LitS3:

On khiển demo:

private S3Service s3 = new S3Service() 
    { 
     AccessKeyID = "Thekey", 
     SecretAccessKey = "testing" 
    }; 

    public ActionResult Index() 
    { 
     ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

     return View("Index",s3.GetAllBuckets()); 
    } 

Vào xem demo:

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

EDIT 1:

Vì tôi phải tiếp tục di chuyển và không có chỉ dẫn rõ ràng về thư viện nào hiệu quả hơn và được cập nhật nhiều hơn, tôi có đã triển khai một mẫu kho lưu trữ với một giao diện cho phép tôi thay đổi thư viện nếu tôi cần trong tương lai. Dưới đây là một phần của S3Repository mà tôi đã tạo ra và sẽ cho phép tôi thay đổi các thư viện trong trường hợp tôi cần phải:

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 

Nếu bạn có bất kỳ thông tin về câu hỏi này xin vui lòng cho tôi biết trong một chú thích, và tôi sẽ nhận được quay lại và chỉnh sửa câu hỏi.

EDIT 2: Kể từ khi câu hỏi này là không nhận được sự chú ý, tôi tích hợp cả các thư viện trong ứng dụng web của tôi để thấy sự khác biệt trong thiết kế, tôi biết điều này có lẽ là một eo của thời gian, nhưng tôi thực sự muốn có một dài tốt chạy giải pháp. Dưới đây bạn sẽ thấy hai mẫu của cùng một hành động với hai thư viện, có lẽ điều này sẽ thúc đẩy một số bạn cho tôi biết suy nghĩ của bạn.

VỚI BA SHARP THƯ VIỆN:

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

VỚI LITS3 THƯ VIỆN:

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

Tại sao bạn không như LitS3? Tôi đang sử dụng ThreeSharp mà không gặp bất kỳ vấn đề gì. –

+0

Tôi không có khiếu nại về LitS3. Tôi chỉ muốn đảm bảo rằng tôi sẽ có thể có toàn quyền kiểm soát S3 API và nó sẽ có hiệu quả. Cám ơn bạn đã góp ý. – Geo

+0

Tôi đã không sử dụng LitS3 nhưng tôi sử dụng rất nhiều ThreeSharp và tôi nghĩ rằng nó đã được thiết kế tốt. – skalb

Trả lời

4

tôi có thể kêu vang trong bằng cách nói rằng chúng tôi đã được sử dụng Affirma ThreeSharp cho có lẽ là một năm hoặc lâu hơn. Tôi khá chắc chắn lần đầu tiên chúng tôi sử dụng S3, chúng tôi đã sử dụng thư viện SOAP của Amazon mà chắc chắn không dễ dàng như ThreeSharp của Affirma.

Tôi cũng nhận thấy nó rất đáng tin cậy, ngay cả khi thực hiện hàng loạt công việc và tải lên/tải xuống lượng dữ liệu lớn. Dự án dường như không được cập nhật nhiều, nhưng sau đó chúng tôi đã không cảm thấy như nó đã từng cần cập nhật!

Mã dụ: Something như thế này sẽ tải lên một tập tin:

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

Edit: Amazon hiện nay đã ra mắt thư viện Net riêng của họ cho các dịch vụ web của họ (bao gồm S3) nên hậu quả là Affirma không còn hỗ trợ họ thư viện.
http://aws.amazon.com/sdkfornet/

+0

Hi Perhentian: Bạn cảm thấy thế nào về việc thiếu thiết kế đối tượng trong thư viện của Affirma. Họ làm cho bạn xử lý XML, có cách nào khác, tôi đang thiếu cái gì đó? bất kỳ đầu vào về điều đó? – Geo

+0

Xin chào Geo, Thực ra tôi chưa đi gần bất kỳ XML nào. Bạn sẽ có thể tải lên một tệp chỉ bằng một vài dòng C#. Hãy xem dự án mẫu của họ. – Perhentian

1

Tôi đã may mắn hơn với LitS3. BaSharp một là tải lên các tập tin với 0 byte theo thời gian và thẳng thắn là một chút over-thiết kế cho vấn đề nó giải quyết.

14

Hình như thư viện chính thức tại là 'AWS SDK cho .NET', có sẵn ở đây: http://aws.amazon.com/sdkfornet/

Hình như nó bao gồm:

  • mẫu Mã
  • Visual Studio tích hợp
  • Mã thư viện .NET

Nó hỗ trợ:

  • Amazon Elastic Compute Cloud
  • Amazon Simple Storage Service
  • Amazon ảo Private Cloud
  • Amazon SimpleDB
  • Amazon Relational Database Service
  • Amazon CloudFront
  • Amazon Simple Dịch vụ xếp hàng
  • Amaz Nghĩa vụ thông báo đơn giản
  • Amazon Elastic MapReduce
  • Amazon CloudWatch
  • đàn hồi Cân bằng
  • Auto Scaling tải
Các vấn đề liên quan