如何从Azure的Blob存储中下载文件
如何从Azure的Blob存储中下载文件
问题出现的原因:根据AFAIK,我们无法直接通过Ajax调用来下载文件。因此,需要通过其他方法来实现文件的下载。
解决方法:可以创建一个单独的WebForm页面,将输出Blob文件的代码移动到Page_Load方法中,并使用查询字符串来传递参数。具体代码如下:
protected void Page_Load(object sender, EventArgs e) { var blobStorageName = Request.QueryString["blobStorageName"]; var companyID = Request.QueryString["companyID"]; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Microsoft.Azure.CloudConfigurationManager.GetSetting("StorageConnectionString")); CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference(System.Text.RegularExpressions.Regex.Replace(companyID.ToLower(), @"\s+", "")); CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobStorageName); System.IO.MemoryStream memStream = new System.IO.MemoryStream(); blockBlob.DownloadToStream(memStream); HttpResponse response = HttpContext.Current.Response; response.ContentType = blockBlob.Properties.ContentType; response.AddHeader("Content-Disposition", "Attachment; filename=" + blobStorageName.ToString()); response.AddHeader("Content-Length", blockBlob.Properties.Length.ToString()); response.BinaryWrite(memStream.ToArray()); }
然后在客户端,可以通过以下方式下载文件:
window.location = "/FroalaImageUpload.aspx?blobStorageName=2017%2F11%2F7%2F2017-7-10-1.png&companyID=images";
此外,还可以使用`iframe`来下载文件。详细信息可以参考类似问题的解决方案。
作者通过在页面上添加一个`