最近工作中,碰到一个问题。文件上传的时候,用的是 input type = ‘file’ 标签。文件上传的时候要获取上传的进度数据,前端以进度条的形式展现。在网上找了一些例子,基本上都不是实时返回上传进度数据。求高手指定!最好给出例子。
记得以前写的进度条 是 估算时间 然后让它跑的,其实只要结束进度条结束,挺好的
这样不精确吧,特别上传大文件的时候,估算不出来啊。
上传前先获取文件的大小,然后实时计算收到的文件大小/原始文件大小,不行吗?
上传前可以获取文件的大小,那么问题来了,怎么实时计算收到的文件大小?
上传文件一般是转成二进制流传输,上传前总的大小知道,然后上传过程中比如每传输100k就异步回写一次,前端根据异步回写结果显示进度,当100进度就是上传完成。现在的ajax进度条基本都是这个原理
asp.net的文件上传,控制不了文件上传的进度。比如说 HttpFileCollectionBase这个对象,我们怎么知道是啥时候,赋值的。我们在后端调用这个对象的时候,这个对象的文件流已经被赋值了。
HTML5 的File API才支持。
如果你程序不是html5的话。只能用flash,SL做。
还是有很多上传文件的控件,你找一下就可以了,上传控件也一般用flash,SL做的
flash是可以做,但是我只想知道单纯靠asp.net跟 ajax 能不能做到,我查了下网上有人说可以做。
@0小贝: 不用浪费时间了。
在不支持html5前,一切原生html是不可能知道上传进度,
所有都是用falsh,SL做。
只有HTML5的File API才可以。
当今, flash上传文件是首选, 其它的都是徒劳。
单靠asp.net+HTML?It's impossible!
是的,用html +ajax + asp.net ,不用flash 。网上有人说可以做到 ,定义一个httpModuler 访问HttpWorkerRequest对象。但具体怎么做 ,我还是没弄明白。
Asp.net 技术内幕上面 有这样一个例子 你可以参考下
这书里没有这个例子。。
感觉可以实现.之前没有实现过
看看百度网盘上传,也是估算的时间,进度条到头了,其实文件没有上传完成,不过显示上面人性化一点就可以了。
你需要的是 jquery.form
http://jquery.malsup.com/form/#file-upload
页面下方有详细的progress教程
很简单的
楼上的都没做过,有些东西,真的是知识面的问题。
这个 方法IE10 以下的版本支持。
@0小贝: 支持啊,必须支持。这个没有浏览器限制的。
我之前看过你的需求,可以实现的,原理是这样的,服务端代码定义一个静态变量来保存进度或将上传的进度保存到ViewState或文件或缓存。并且在服务端定义一个支持Ajax的WebService方法,这个方法返回保存的进度。客户端在上传的过程中,通过js不断调用这个WebService来获取最新的上传进度。