1

我使用“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> 
}

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

在此处输入图像描述

您可以在此处看到有一个“Data Left”字段。在下载另一个文件之前,我需要检查是否

    Downloaded File size > Data Left

那么它不应该下载。

请建议

4

1 回答 1

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

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

于 2013-09-12T21:23:55.047 回答