2012-08-03 23 views
6

Tôi có một trình cài đặt phần mềm được xuất bản dưới dạng blob Azure và tôi cần đếm số lần nó đã được tải xuống.Làm thế nào để phát hiện hoặc đếm tải xuống blob Azure?

Vấn đề là nó có thể được tham chiếu bên ngoài (từ nhiều trang tải xuống), do đó tôi không thể kiểm soát nó thông qua trang web.

Vì vậy, ... Windows Azure có một cơ chế để phát hiện tải xuống blob hoặc đăng ký số lượng của chúng? Cảm ơn!

+1

Nếu bạn có BLOB công khai có sẵn (tức là, không trừu tượng đằng sau một dịch vụ) thì điều gần nhất tôi nghĩ bạn sẽ nhận được là Nhật ký số liệu lưu trữ. Xem http://blogs.msdn.com/b/windowsazurestorage/archive/2011/08/03/windows-azure-storage-metrics-using-metrics-to-track-storage-usage.aspx. Tôi không chắc chắn điều này sẽ giúp bạn có được chính xác những gì bạn đang tìm kiếm mặc dù. – MikeWo

+0

Tất nhiên là nếu ở phía sau một dịch vụ thì bạn có thể dễ dàng đếm nó. BTW, cho trình cài đặt phần mềm, bạn cũng có thể muốn sử dụng CDN làm cho trải nghiệm tốt hơn, nhưng công việc của bạn khó hơn (mặc dù bạn vẫn có thể sử dụng dịch vụ và CDN). Âm thanh như thế này hiện đang trong tự nhiên, và một dịch vụ không thể thực hiện được ở giai đoạn này? –

+0

@MikeWo - bạn nên chuyển nhận xét của mình thành câu trả lời. –

Trả lời

9

Bạn đã từng cân nhắc đặt thùng chứa của mình ở chế độ riêng tư chưa? Điều này sẽ ngăn mọi người tải xuống trực tiếp các đốm màu. Bằng cách này, bạn có toàn quyền kiểm soát ai có thể tải xuống các tệp và trong bao lâu họ có thể thực hiện việc này.

Giả sử chỉ người dùng đã đăng ký mới có thể tải xuống tệp và bạn đang sử dụng ASP.NET MVC. Sau đó, bạn có thể có một hành động tương tự với trang này:

[Authorize] 
    public ActionResult Download(string blobName) 
    { 
     CountDownload(blobName); 

     var blobClient = storageAccount.CreateCloudBlobClient(); 
     var container = blobClient.GetContainerReference(containerName); 
     var blob = container.GetBlobReference(blobname); 

     var sas = blob.GetSharedAccessSignature 
     (
      new SharedAccessPolicy 
      { 
       Permissions = SharedAccessPermissions.Read, 
       SharedAccessStartTime = DateTime.Now.ToUniversalTime(), 
       SharedAccessExpiryTime = DateTime.Now.ToUniversalTime().AddHours(1) 
      } 
     ); 

     return Content(blob.Uri.AbsoluteUri + sas); 
    } 

Điều này không như sau:

  • Thuộc tính Authorize đảm bảo chỉ những người dùng đã đăng nhập có thể truy cập vào hành động này.
  • Bạn tăng số lượng tải cho rằng blob
  • Bạn nhận được một tài liệu tham khảo của blob dựa trên tên
  • Bạn tạo ra một chữ ký mà cho phép tải về các blob trong 1 giờ
  • Bạn trở url của blob với chữ ký (bạn cũng có thể chuyển hướng đến địa chỉ blob)

Bằng cách phân phát URL có chữ ký qua ứng dụng bạn có toàn quyền kiểm soát và thậm chí bạn có thể xem các kịch bản khác như CAPTCHA, tải xuống trả tiền, nâng cao quyền trong ứng dụng của bạn, ...

+0

Tôi hiểu, điều này hoàn chỉnh hơn tôi nghĩ. Cảm ơn! –

+0

Bạn có thể sử dụng 'DateTime.UtcNow' và cũng không cần chỉ định thời gian bắt đầu (xem đồng hồ nghiêng). – nmit026

6

Bạn có thể sử dụng storage analytics để tìm ra bao nhiêu tải blob của bạn đã có:

sử dụng Blob cũng có sẵn như là một đồ thị trong cổng quản lý mới:

enter image description here

+0

Phân tích lưu trữ đó (tổng số yêu cầu cho mỗi blob id) có bằng cách nào đó qua API không? Tôi quan tâm đến việc truy vấn số lượt tải xuống chỉ dành cho mục đích báo cáo. – kzu

Các vấn đề liên quan