我使用“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>
}
情况是,我为用户设置了下载限制,因此我需要在下载之前获取文件大小,以便我可以检查是否达到“下载限制”。
你可以在这里看到有一个“数据剩余”字段。在下载另一个文件之前,我需要检查是否
Downloaded File size > Data Left
然后它不应该下载。
请建议
答案 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,所以我会假设每次点击都要收取交易费用,更不用说等待请求的延迟增加了;我建议您在上传时记录文件大小,并将其保存到您的数据库或其他持久存储中。