2012-08-03 19 views
6

Ho un programma di installazione software pubblicato come blob di Azure e devo contare quante volte è stato scaricato.Come rilevare o contare i download di BLOB di Azure?

Il problema è che si può fare riferimento esternamente (da molti siti di download), quindi non posso controllarlo tramite il sito web.

Quindi ... Windows Azure ha un meccanismo per rilevare i download di blob o registra il conteggio di essi? Grazie!

+1

Se avete la BLOB pubblicamente disponibile (vale a dire, non astratto dietro un servizio) quindi la cosa più vicina che penso si otterrà è i log di memorizzazione metriche. Controlla http://blogs.msdn.com/b/windowsazurestorage/archive/2011/08/03/windows-azure-storage-metrics-using-metrics-to-track-storage-usage.aspx. Non sono sicuro che questo ti farà esattamente ciò che stai cercando. – MikeWo

+0

ovviamente se ci fosse dietro un servizio allora puoi contarlo facilmente. A proposito, per un programma di installazione del software si potrebbe anche voler utilizzare il CDN rendendo l'esperienza migliore, ma il tuo lavoro più difficile (anche se puoi ancora utilizzare un servizio e il CDN). Sembra che questo sia in natura ora e un servizio non è praticabile in questa fase? –

+0

@MikeWo - dovresti spostare il commento su una risposta. –

risposta

9

Hai mai considerato di rendere privato il tuo contenitore? Ciò impedirebbe alle persone di scaricare direttamente i BLOB. In questo modo hai il pieno controllo di chi può scaricare i file e per quanto tempo possono farlo.

Supponiamo che solo gli utenti registrati possano scaricare il file e si stia utilizzando ASP.NET MVC. Poi si potrebbe avere un'azione simile a questo:

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

Quello che fa è il seguente:

  • L'attributo Autorizza fa in modo solo gli utenti che si registrano in grado di accedere a questa azione.
  • si aumenta il conteggio dei download per quel blob
  • si ottiene un riferimento del blob in base al nome
  • si genera una firma che permette di scaricare il blob per 1 ora
  • È restituire l'URL del blob con la firma (si potrebbe anche avere reindirizzare all'URL blob)

distribuendo l'URL con la firma attraverso l'applicazione si ha il pieno controllo e si può anche guardare in altri scenari come CAPTCHA, download a pagamento, avanzata autorizzazioni nell'applicazione, ...

+0

Vedo, questo è più completo di quello che avevo in mente. Grazie! –

+0

È possibile utilizzare 'DateTime.UtcNow' e inoltre non è necessario specificare un'ora di inizio (prestare attenzione alla differenza di orario). – nmit026

6

Si potrebbe utilizzare storage analytics per capire quanti download il vostro blob ha avuto:

utilizzo Blob è disponibile sotto forma di grafico nel nuovo portale di gestione anche:

enter image description here

+0

L'analisi dello spazio di archiviazione (richieste totali per ID blob) è disponibile in qualche modo tramite un'API? Sono interessato a interrogare il conteggio dei download per un blob solo a scopo di segnalazione. – kzu

Problemi correlati