开发者

Download stream to browser using Response.close / .end, how to avoid to abort the rest of response?

开发者 https://www.devze.com 2023-03-24 07:47 出处:网络
I have a 5MB MemoryStream generated on server and it needed serving to users as an excel File. I used Response.close to make it downloadable. But for sure, it will abort all requests / response on th

I have a 5MB MemoryStream generated on server and it needed serving to users as an excel File.

I used Response.close to make it downloadable. But for sure, it will abort all requests / response on the pa开发者_StackOverflow中文版ge.

I known using a download page may help the thread, but how do I pass the MemoryStream to the download page? Normally it should pass a file URL to that page.

Any ideas?

More comments: 1. First, I want stream the file to client. To make it download property, which can be used instead of Response.close(). 2. Second, during the client download, I want to show an processing bar(JUST AN IMAGE). The Response.close will stop the JavaScript function to hidden the bar.

So how to achieve the both requires? Thanks

Thanks anyway. The difficulty is that after Response.End or CompleteRequest the Http header has been sent. I'll not be able to access anything in the frond end. I should really use a separate page that handles process logic as well as is used to download file.


Your question is a little unclear. You ask how to end the response without ending the response. Do you mean you want to rest of the code to run after the response is flushed to the client? Or are you having a problem with the actual response not being right?

Using Response.Close() could be problematic as it basically resets the HTTP connection to the client. See This MSDN Blog Post and MSDN Response.Close() Reference.

If you can describe the problem you are having with more detail I can update my answer.


Look at Response.Flush();

Also, see this: http://blogs.msdn.com/b/aspnetue/archive/2010/05/25/response-end-response-close-and-how-customer-feedback-helps-us-improve-msdn-documentation.aspx


Should the logic of generating your excel file be on it own separate page or handler?


In order to achieve your second objective, it would require a session-based object (holding the size of file generated) that can get updated periodically and asynchronously during the generation of your downloading file. And the object then can be read by the AJAX request that is need to be periodically sent from the page that holds progress bar, then you can grab that to update the progress bar in the frond end.

Just an idea, not sure if it works. If you google AJAX progress bar you can find couple of examples. Hope it helps

0

精彩评论

暂无评论...
验证码 换一张
取 消