2012-08-03 26 views
6

Tengo un instalador de software publicado como un blob de Azure y necesito contar cuántas veces se ha descargado.¿Cómo detectar o contar las descargas de blobs de Azure?

El problema es que se puede hacer referencia externamente (desde muchos sitios de descarga), por lo tanto, no puedo controlarlo a través del sitio web.

Entonces ... ¿tiene Windows Azure un mecanismo para detectar descargas de blobs o registra el recuento de ellas? Gracias!

+1

Si tiene el BLOB disponible públicamente (es decir, no se abstrae detrás de un servicio), entonces lo más cercano que creo que obtendrá son los registros de mediciones de almacenamiento. Consulte http://blogs.msdn.com/b/windowsazurestorage/archive/2011/08/03/windows-azure-storage-metrics-using-metrics-to-track-storage-usage.aspx. Sin embargo, no estoy seguro de que esto te brinde exactamente lo que estás buscando. – MikeWo

+0

por supuesto, si estuviera detrás de un servicio, entonces podría contarlo fácilmente. Por cierto, para un instalador de software es posible que también desee utilizar el CDN mejorando la experiencia, pero su trabajo es más difícil (aunque aún puede usar un servicio y el CDN). Suena como que ahora está en la naturaleza, ¿y un servicio no es viable en esta etapa? –

+0

@MikeWo - debe mover su comentario a una respuesta. –

Respuesta

9

¿Alguna vez pensó en hacer su contenedor privado? Esto evitaría que las personas descarguen blobs directamente. Al hacer esto, usted tiene el control total de quién puede descargar los archivos y durante cuánto tiempo pueden hacerlo.

Supongamos que solo los usuarios registrados pueden descargar el archivo y están utilizando ASP.NET MVC. Posteriormente, se podría tener una acción similar a ésta:

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

Lo que esto hace es la siguiente:

  • El atributo Autorizar asegura que sólo los usuarios que han iniciado sesión pueden acceder a esta acción.
  • se aumenta el número de descargas para esa burbuja
  • Usted recibe una referencia de la burbuja basada en el nombre
  • Se genera una firma que permite la descarga de la burbuja durante 1 hora
  • que devuelva el url de la burbuja con la firma (que también podría tener que redirigir a la URL blob)

mediante la entrega de la URL con la firma a través de la aplicación que tiene el control total e incluso se puede buscar en otros escenarios como de CAPTCHA, descargas de pago, avanzada permisos en su aplicación, ...

+0

Veo, esto es más completo de lo que tenía en mente. ¡Gracias! –

+0

Puede usar 'DateTime.UtcNow' y tampoco es necesario especificar una hora de inicio (tenga cuidado con el sesgo del reloj). – nmit026

6

Usted podría utilizar storage analytics de averiguar cuántas descargas de su burbuja ha tenido:

uso de la gota también está disponible como un gráfico en el nuevo portal de gestión:

enter image description here

+0

¿Es ese análisis de almacenamiento (solicitudes totales por ID de blob) disponible de alguna manera a través de una API? Estoy interesado en consultar el conteo de descargas de un blob solo para fines informativos. – kzu

Cuestiones relacionadas