asp.net ajax上传文件实时进度条不工作

时间:2011-02-17 17:20:27

标签: asp.net ajax file-upload upload

我正在尝试执行ajax文件上传和实时进度条, 我在localhost中测试了它并且它工作得很好, 但是,当我尝试在在线Web服务器上测试它时,直到上传文件结束时,该栏才能正常工作, 当我在上传循环结束时放入System.Threading.Sleep(value)时, 酒吧工作但上传速度很慢,

我该如何解决这个问题?

我使用的步骤:

  1. 构建iframe(指向Upload.aspx)并在其中上传文件。

  2. 在页面加载javascript函数中,使用window.parent.register(form)函数调用iframe页面,该函数将iframe表单预测为父页面中的javascript变量。

  3. 在父页面(Default.aspx)中,我放置了一个按钮,然后单击已提交谓词的iframe表单。然后javascript间隔每隔1000ms调用一次ajax回调函数。

  4. 此功能(ajax回调)正在观看会话[“UploadInfo”]。

  5. 当iframe表单提交iframe页面时,它调用DoUpload()方法从(fileUpload.PostedFile.InputStream.Read(bytes,0,1);)中读取while循环中的文件然后写入特定路径中的字节,并将(1)添加到会话[“UploadInfo”](这会增加进度条)。

  6. 我希望DoUpload和ajax回调函数能够同步工作。

  7. 当我在localhost运行网站时,每件事情都按照我的预期运作,但是当从网站运行时,进度条不起作用。

  8. 注意:当我在while循环中放入System.Threading.Thread.Sleep(100)时,进度条会起作用,但速度非常慢。

1 个答案:

答案 0 :(得分:1)

您好我在搜索带有进度条和文件大小验证的非Flash文件上传解决方案时找到了您的答案。

通常,您需要支持flash或java的applet,它既适用于客户端浏览器,也适用于服务器端。

但是,我正在寻找你所尝试过的确切解决方案。

你尝试过很好,但问题在于实现逻辑。你很清楚Javascript无法访问本地文件系统。所以你依靠AJAX来获取服务器端代码来告诉你接收/上传的文件数量。

对计算filesize的文件的异步调用是个好主意。要了解您面临的问题,您需要了解其工作方式。

文件上传将使用流式读取器和流式写入器,它们位于浏览器端,位于服务器端的文件系统。您可能还需要考虑相同的源策略,这对于对服务器的多个AJAX请求非常重要。

根据HTTP 1.1规范,任何浏览器都只会同时向服务器发送2个并行连接。换句话说,只能从同一域名下载2个资源。

请检查这些选项并发布回复。最好选择一个组件。我正在使用obout文件上传器(http://www.obout.com/Obout.Ajax.UI/FileUpload/)。我工作很多年了。现在我需要一个不含闪存的组件,根据我的客户要求。否则它是我用于文件上传的最佳ASP.NET组件。