通过浏览器下载Blob文件

时间:2020-01-29 13:19:03

标签: c# asp.net blob

我正在尝试让一个按钮为我的用户启动从Blob存储中的下载。但是,单击该按钮后,下载将永远不会开始,它会挂在加载面板上。请参阅下面的回调事件。 'Blob'类型只是.net中所有正常的Azure Blob函数的代码库中的某些包装器类。逐步处理事件时,一切似乎都在事件中正常运行,因为使用正确的文件正确构建了HTTP响应,所以我认为这可能是生命周期问题?但是我仍然可以理解为什么会这样吗?请帮助我!

protected void DownloadFile_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e)
{
    var blobStorageId = gDownloads.GetRowValues(e.VisibleIndex, "BlobStorageId");

    var azureConnectionString = ConfigurationManager.ConnectionStrings("AzureStorageConnectionString").ConnectionString;

    Blob bs = new Blob(azureConnectionString, kStorageContainer, kStorageFolder);
    var blobItem = bs.DownloadAnyExtension(blobStorageId.ToString).FirstOrDefault();

    MemoryStream ms = new MemoryStream();
    blobItem.DownloadToStream(ms);
    var resultStream = ms.ToArray();

    HttpContext.Current.Response.Buffer = true;
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ContentType = blobItem.ContentType;
    HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + blobItem.FileName.ToString);
    HttpContext.Current.Response.AddHeader("content-length", blobItem.GetLength.ToString);
    HttpContext.Current.Response.BinaryWrite(resultStream);

    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.End();
    ms.Close();

    RefreshGrid();
}

0 个答案:

没有答案