I have a software installer published as an Azure blob and I need to count how many times it has been downloaded.
The problem is that it can be referenced externally (from many download sites), therefore I cannot control it via website.
So... does Windows Azure have a mechanism to detect blob downloads or registers the count of them? Thanks!
The diagnostics logs are saved in a blob container named $logs in your storage account. You can view the log data using a storage explorer like the Microsoft Azure Storage Explorer, or programmatically using the storage client library or PowerShell.
This module simply counts the number of non-black pixel groups (blobs) within the current image.
If no exception throws from your code, it means the blob has been uploaded successfully. Otherwise, a exception will be thrown. You can also confirm it using any web debugging proxy tool(ex. Fiddler) to capture the response message from storage server.
View from a storage accountIn the Azure portal, select Storage accounts. From the list, choose a storage account. In the Monitoring section, choose Insights.
You could use storage analytics to figure out how many downloads your blob has had:
Blob usage is also available as a graph in the new management portal:
Did you ever consider to make your container private? This would prevent people from downloading blobs directly. By doing this you are in full control of who can download the files and for how long they can do this.
Let's assume only registered users can download the file and you're using ASP.NET MVC. Then you could have an action similar to this one:
[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);
}
What this does is the following:
By handing out the URL with signature through your application you have full control and you can even look at other scenarios like CAPTCHA, paying downloads, advanced permissions in your application, ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With