How to detect or count Azure blob downloads?

2019-02-09 19:43发布

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!

标签: azure blob
2条回答
\"骚年 ilove
2楼-- · 2019-02-09 19:53

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:

enter image description here

查看更多
Deceive 欺骗
3楼-- · 2019-02-09 20:10

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:

  • The Authorize attribute makes sure only users that are logged in can access this action.
  • You increase the download count for that blob
  • You get a reference of the blob based on the name
  • You generate a signature that allows downloading the blob for 1 hour
  • You return the url of the blob with the signature (you could also have it redirect to the blob url)

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, ...

查看更多
登录 后发表回答