Azure Blob文件在MVC中下载

时间:2013-09-12 20:19:21

标签: asp.net-mvc-3 azure

我使用“window azure cloud service”创建了一个应用程序,我在这里上传/下载这样的azure blob文件

上传代码

public ActionResult UploadImage_post(HttpPostedFileBase fileBase)
    {
        if (fileBase.ContentLength > 0)
        {
            Microsoft.WindowsAzure.StorageClient.CloudBlobContainer blobContainer =
                _myBlobStorageService.GetCloudBlobContainer();

            Microsoft.WindowsAzure.StorageClient.CloudBlob blob =
                blobContainer.GetBlobReference(fileBase.FileName);

            blob.UploadFromStream(fileBase.InputStream);
        }
        return RedirectToAction("UploadImage");
    }

下载代码

Microsoft.WindowsAzure.StorageClient.CloudBlobContainer blobContainer =
         _myBlobStorageService.GetCloudBlobContainer();

        Microsoft.WindowsAzure.StorageClient.CloudBlob blob =
            blobContainer.GetBlobReference(filename);

return Redirect(blobContainer.GetBlobReference(filename).Uri.AbsoluteUri);

这是我的观点

@foreach (var item in Model)
{
        <img src="@item" width="200" height="100" />
        <a href="/Blob/Download?filename=@item">Download</a> 
}

情况是,我为用户设置了下载限制,因此我需要在下载之前获取文件大小,以便我可以检查是否达到“下载限制”。

enter image description here

你可以在这里看到有一个“数据剩余”字段。在下载另一个文件之前,我需要检查是否

    Downloaded File size > Data Left

然后它不应该下载。

请建议

1 个答案:

答案 0 :(得分:1)

在决定是否有足够的下载带宽之前,您必须检查blob的大小。

Microsoft.WindowsAzure.StorageClient.CloudBlob blob =
            blobContainer.GetBlobReference(filename);

blob.FetchAttributes();

var blobsize = blob.Properties.Length; // this is in bytes
// is size less than bandwidth left. etc

Spoiler:这实际上会查询blob,所以我会假设每次点击都要收取交易费用,更不用说等待请求的延迟增加了;我建议您在上传时记录文件大小,并将其保存到您的数据库或其他持久存储中。