2011-02-17 86 views
1

我正在尝试执行ajax文件上传和实时进度条 我已经在localhost中测试过它,它工作完美 但是当我尝试在它上面进行测试时在上传文件结束时,在线Web服务器栏无法工作, 当我在上传循环结束时放入System.Threading.Sleep(值), 酒吧工作但上传速度很慢,asp.net ajax上传文件实时进度条无法正常工作

我该如何解决这个问题?

我使用的步骤:

  1. 构建IFRAME(点Upload.aspx)和里面的文件上传。

  2. 在页面加载JavaScript函数的iframe页面调用window.parent.register(表单)函数,该函数将iframe格式判断为父页面中的JavaScript变量。

  3. 在父页面(Default.aspx)中,我放置了一个按钮,然后onclick被预测的iframe表单被submited。然后javascript间隔每调用一次ajax回调函数(1000ms)。

  4. 此函数(ajax回调函数)正在监视会话[“UploadInfo”]。

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

  6. 我想让DoUpload和ajax回调函数同步工作。

  7. 当我运行在localhost的网站每一件事工程完全按照我期望的,但是,当从网站上运行该进度条不工作。

注意:当我在while循环中放置System.Threading.Thread.Sleep(100)时,进度条可以工作,但速度很慢。

+0

有没有可用的代码?你用什么控制? – Aristos 2011-02-17 17:37:09

回答

1

嗨我找到你的答案,同时我搜索一个非闪存文件上传解决方案进度条和文件大小验证。

一般而言,您需要像客户端浏览器和服务器端一样的flash或java applet。

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

你试过很好,但问题出在实现逻辑上。你非常了解Javascript不能访问本地文件系统。所以你依靠AJAX获取服务器端代码来告诉你接收/上传文件的数量。

对计算文件大小的文件进行异步调用是个不错的主意。要理解你面临的问题,你需要了解它的工作方式。

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

通过HTTP 1.1规范,任何浏览器将只同时向服务器抛出2个并行连接。换句话说,只能从相同的域名下载2个资源。

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