下载文件时,所有请求都会被阻止

发布于 2024-07-29 17:39:02 字数 629 浏览 8 评论 0原文

我的应用程序 Pelotonics 遇到问题。 当用户下载文件时,系统似乎会阻止所有传入请求,直到该文件下载完成。 打开下载对话框(浏览器的标准),让用户开始下载文件,然后在下载文件时让用户继续整个应用程序的正确技术是什么。

我们从服务器获取文件的方式是有一个单独的 ASPX 页面,该页面通过查询字符串传入一个值,然后从服务器检索文件流,然后添加“content-disposition”标头到 Response,然后循环遍历文件流并将 2KB 块读取到 response.outputstream。 然后,一旦完成,我就会执行 Response.End。

观看此问题的快速截屏视频:

http://www.screencast.com/users/PeloCast/folders/Jing/media/8bb4b1dd-ac66-4f84-a1a3-7fc64cd650c0

顺便说一句,我们使用的是 ASP.NET 和 C#.. 。

谢谢!!! 丹尼尔

I'm having an issue within my application Pelotonics. When a user downloads a file the system seems to block all incoming requests until that file is done downloading. What is the proper technique to to open a download dialog box (standard from the browser), let the user start downloading the file, then while the file is downloading, let the user continue throughout the application.

The way we're getting the file from the server is we have a separate ASPX page that get's passed in a value through the query string, then retrieves the stream of the file from the server, then I add the "content-disposition" header to the Response and then loop through the file's stream and read 2KB chunks out to the response.outputstream. Then once that's done I do a Response.End.

Watch this for a quick screencast on the issue:

http://www.screencast.com/users/PeloCast/folders/Jing/media/8bb4b1dd-ac66-4f84-a1a3-7fc64cd650c0

by the way, we're in ASP.NET and C#...

Thanks!!!
Daniel

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

五里雾 2024-08-05 17:39:02

我认为 ASP.NET 允许每个会话同时执行一个页面,并且我不知道有任何其他方式来配置它。

这不是一个非常漂亮的解决方法,但如果您将 ASP.NET_SESSIONID 值重写到 Application_BeginRequest(在 global.asax 中)中的请求 cookie,它可能会有所帮助。 当然,您需要通过其他方式进行身份验证。 不过我还没有尝试过这个。

另一种方法是为下载过程启动一个单独的线程,但是您需要找到一种方法来完成此操作,而无需工作线程关闭其资源。

请问,有什么理由不直接使用 HttpResponse.TransmitFile 吗?

I think ASP.NET allows one simultaneous page execution per session and I'm not aware of any way to configure this otherwise.

This is not a very pretty workaround, but it might help if you rewrote ASP.NET_SESSIONID value to the request cookie in Application_BeginRequest (in global.asax). Of course, you would need to the authentication some other way. I haven't tried this, though.

Another way would be launching a separate thread for the download process, but you would need to find a way how this can be done without the worker thread closing it's resources.

May I ask, is there a reason why don't you just use HttpResponse.TransmitFile?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文