2012-10-31 42 views
0

所有的,我想找到一种方法来从Asp.net MVC 4网站下载一个大的blob文件(大约200MB),这里是我的代码片段。请检查它。谢谢。在网站下载Azure Blob

string sBlobName ="xxxxx"; 
Response.ContentType="application/octet-stream"; 
Response.AddHeader("Content-Disposition", "attachment;filename=" + sBlobName); 

long lFileSize =200*1024*1024; 
int iOffset = 0; 
int iBufferSize = 4 * 1024 * 1024;//MB 

while (iOffset < lFileSize) 
{ 
    //Chunk read blob into a byte array 
    var bData = StorageHelper.ChunkReadPackage(sContainerName, sPackFullPath, iOffset, iBufferSize); 
    Response.BinaryWrite(bData); 
    iOffset += bData.Length; 
} 
Response.Flush(); 
Response.End(); 

return new EmptyResult(); 

看来毕竟这是从BLOB读取数据块被Response.BinaryWrite()发送到客户端,然后我的Firefox可以在下载对话框窗口弹出我。

我的问题

为什么需要Response.BinaryWrite()的全部内容?无论如何要让这个过程更有效率吗?我的意思是如果有一种方法可以在第一块blob发送到客户端之后在客户端下载流。等待所有内容被发送到客户端。

+0

为什么不只是使用Azure存储客户端API? – AbdElRaheim

+0

@AbdElRaheim对不起,我没有明白你的意思,当然我在函数'StorageHelper.ChunkReadPackage'中使用Azure存储API,然后将块发送到客户端。你有没有检查我的代码?或者,我错过了什么? –

+0

我相信它与天青无关。所以我没有在我的文章中添加Azure标签 –

回答

1

Response.BufferOutput = false;它的工作原理。