宝玉的blog

专注于web开发技术
随笔 - 81, 评论 - 1571, 引用 - 157

导航

关于


目前致力于ChinaCommunityServer的开发。

msn: junminliu(at)msn.com

标签

每月存档

最新留言

广告

 

几个月前,写过一篇关于Asp无组件上传带进度条的Blog,当时主要分析了一下通过Web文件上传并在后台获取分析数据的实现原理。其中实现进度条的根本就是要实现分块获取数据,根据分块大小和块数记录已上传大小。还有一些具体的细节问题当时并没有说清楚:

Q: 进度信息如何访问?
A: 进度信息保存在Application中,每次上传时生成一个进度ID,根据这个进度ID可以检索Application中的当前上传进度信息。

Q: 进度信息以什么形式保存在Application中?
A: Asp太弱了,我分别试过Scripting.Dictionary和XMLDom,但是Asp中Application不能保存这种对象,要是asp.net就直接可以用Hashtable了。最后是在Application中用一个ADODB.Recordset对象来保存进度相关信息。

Q: 怎么保证的页面能即时反应显示进度条信息?
A:
文件开头加上<%@enablesessionstate=false%>声明来关闭会话状态
要保证禁用缓存:
 Response.CacheControl = "no-cache"
 Response.Expires = -1

Q: 可以上传多大文件?
A: 这个和网速,服务器内存等多方面因素有关,将Server.ScriptTimeout设置足够长,那么理论上可以和服务器保持连接很长时间。因为在asp中,不能实现对文件的“追加”写入,必须将所有待写入文件的数据都先保存在内存,这样如果上传大文件,那么将很占用服务器内存(文本文件可以使用TextStream.Write追加写入)。在asp.net下就比较爽了,分块读取的时候,每读一块分析一块,然后将上传文件的数据内容“追加”写入硬盘文件中,对内存占用很小很小。一般几十MB的文件还是没问题,太大的上传其实对于web下也不是很有意义。

写了一个比较完善的实例,可以直接下载使用:

演示下载

打印 | 张贴于 2004-12-11 23:40:00 | Tag:Web技术

留言反馈

#回复: Asp无组件上传带进度条(续) 编辑
改为:utf-8 后,上传非中文的文件OK,但上传中文的出错:
如下:
ADODB.Stream ?? '800a0bbc'

请问这是什么问题,能不能帮忙解答一下.谢谢了
2008-01-05 21:41:00 | [匿名:jjj]
#回复: Asp无组件上传带进度条(续) 编辑
当上传文件名有中文的时候80020009错误,刷新一次后可以上传但是服务器端文件名乱码什么问题
2007-12-19 22:45:00 | [匿名:rsallen]
#回复: Asp无组件上传带进度条(续) 编辑
能不能把你写的那个类的定义的属性和方法都列出来,不然不会用啊,老出错!
顶你!!!
2007-04-10 00:50:00 | [匿名:天下无双]
#ADODB.Stream 错误 '800a0bbc' 编辑
ADODB.Stream 错误 '800a0bbc'

写入文件失败。

?,行 0

请问这是什么问题,能不能帮忙解答一下.谢谢了
2006-12-01 11:12:00 | [匿名:ding]
#re: Asp无组件上传带进度条(续) 编辑
无法显示网页
试图访问的网页出现问题,无法显示。

--------------------------------------------------------------------------------

请尝试执行下列操作:

单击刷新按钮,或稍后重试。

打开 localhost 主页,然后查找与所需信息相关的链接。
HTTP 错误 500.100 - 内部服务器错误 - ASP 错误
Internet 信息服务

--------------------------------------------------------------------------------

技术信息(用于支持人员)

错误类型:
ADODB.Stream (0x800A0BBC)
写入文件失败。
/leichinews/admin/upload_wj.inc, 第 179 行


浏览器类型:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

网页:
POST 31116 ??? /leichinews/admin/upfile_flash.asp

POST Data:
错误 '80020009'
发生意外。

/iisHelp/common/500-100.asp,行 219


请问这样的错误怎么解决呀?
2006-08-23 13:25:00 | [匿名:李飞]
#re: Asp无组件上传带进度条(续) 编辑
是那个文件夹有这个文件了吧?
所以才写入文件失败。
2006-05-18 10:57:00 | [匿名:KEN]
#re: Asp无组件上传带进度条(续) 编辑
ADODB.Stream 错误 '800a0bbc'

写入文件失败。

/bgxt/bgxt/xjyb/upload_5xsoft.inc,行181
2006-04-10 14:54:00 | [匿名:asd]
#re: Asp无组件上传带进度条(续) 编辑
上面的问题都有答案的,看看上面的历史评论:)
2006-03-23 18:51:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
我使用 Asp无组件上传,总是出问题,跟上面的一样,总是说文件里少end
我的email:fancyfreeboy428@163.com
2006-03-23 17:22:00 | [匿名:心和]
# Asp无组件上传带进度条(续) 编辑
我使用 Asp无组件上传,总是出问题,跟上面的一样,总是说文件里少end
2006-03-23 17:19:00 | [匿名:心和]
#re: Asp无组件上传带进度条(续) 编辑
ADODB.Stream 错误 '800a0bbc'

写入文件失败。

/upload_5xsoft.inc,行 175
我也不会这个问题 ,多谢大侠,帮忙
2006-03-17 14:14:00 | [匿名:zh]
#re: Asp无组件上传带进度条(续) 编辑
ADODB.Stream 错误 '800a0bbc'

写入文件失败。

/upload_5xsoft.inc,行 175
2006-03-03 16:35:00 | [匿名:4398457]
#re: Asp无组件上传带进度条(续) 编辑
我不太明白为什么上传完成后页面的进度条还在走?

有些不太完美,有人知道解决方法么?

谢谢。
2006-02-13 20:20:00 | [匿名:暴风雪]
#re: Asp无组件上传带进度条(续) 编辑
ADODB.Stream 错误 '800a0bbc'

写入文件失败。

/admin/incupload.asp,行 161

权限我都开了,文件夹也有,还要怎么弄啊???


这问题有人知道吗??
2006-01-17 11:00:00 | [匿名:joinwin]
#re: Asp无组件上传带进度条(续) 编辑
ADODB.Stream 错误 '800a0bbc'

写入文件失败。

/admin/incupload.asp,行 161

权限我都开了,文件夹也有,还要怎么弄啊???
2005-12-31 21:28:00 | [匿名:李勇兵]
#re: Asp无组件上传带进度条(续) 编辑
很好用啊。
例子很全,所有的问题其实看下例子或按自己实际环境修改一下就可以了嘛。
2005-12-28 14:05:00 | [匿名:test]
#re: Asp无组件上传带进度条(续) 编辑
如果要在上传表单中增加其他元素,并写入数据库该如何实现?
也就是说如果在DEMO.THM里增加一个<input type=text name=ab value=123>
如何在DEMO.ASP里获取这个植啊.
2005-12-23 14:25:00 | [匿名:ken]
#re: Asp无组件上传带进度条(续) 编辑
/iisHelp/common/500-100.asp,行242

Microsoft VBScript 运行时错误 错误 '800a01b6'

对象不支持此属性或方法: 'Form'

/up/UpLoad.asp,行34
2005-11-05 20:44:00 | [匿名:ff]
#re: Asp无组件上传带进度条(续) 编辑
嘿嘿~~ 鲍鱼好~~~ 没想到一搜无组件你这排 Top 1 呢~~~
那偶就借来用用啦~~~ 记得很早你就传过给偶了?
2005-10-26 12:27:00 | [匿名:※潇洒※]
#re: Asp无组件上传带进度条(续) 编辑
Asp无组件上传老是被瑞星报为病毒,郁闷中。。。。。。
2005-08-13 16:34:00 | [匿名:99meng]
#re: Asp无组件上传带进度条(续) 编辑
请问我怎样设置,文件要上传到的目录啊
2005-07-24 00:24:00 | [匿名:arrow]
#re: Asp无组件上传带进度条(续) 编辑
如果要在上传表单中增加其他元素,并写入数据库该如何实现?
2005-07-07 15:18:00 | [匿名:boboo]
#re: Asp无组件上传带进度条(续) 编辑
技术信息(用于支持人员)

错误类型:
ADODB.Stream (0x800A0BBC)
写入文件失败。
/web/upload.inc, 第 168 行


浏览器类型:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

网页:
POST 178853 ??? /web/admin_upfile.asp

POST Data:
错误 '80020009'
发生意外。

/iisHelp/common/500-100.asp,行 219

2005-05-27 22:53:00 | [匿名:feihei]
#re: Asp无组件上传带进度条(续) 编辑
只要将upload.inc文件内的以下代码:
Dim RequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo


改成:
Dim RequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart
Dim oFileInfo
2005-05-23 11:47:00 | [匿名:西门]
#re: Asp无组件上传带进度条(续) 编辑
不知道宝玉兄是不是有无惧无组件上传,这几天凡是无惧无组件上传的都被诺顿KILL了.
2005-05-13 10:18:00 | [匿名:Fandy]
#re: Asp无组件上传带进度条(续) 编辑
十分感谢宝玉的回复和代码 无限感激 有机会我真想请你吃顿饭!
2005-04-29 11:35:00 | [匿名:冰]
#re: Asp无组件上传带进度条(续) 编辑
1. 只支持IE6
2. 如果上传太快也可能不产生
2005-04-26 15:26:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
宝玉 我上传的时候怎么传完东西了 可是进度条不动啊 我不明白是Example_Progress.htm中的脚本问题还是怎么回事啊 !急。。。。。。!
2005-04-26 10:59:00 | [匿名:冰]
#re: Asp无组件上传带进度条(续) 编辑
不能说是bug,而是缺陷.不只是无组件有这个问题,所有的程序都有这个问题!
2005-04-13 20:47:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
这类无组件上传系统有个巨大的BUG@!

如果使用者上传的文件大小超过了系统所限,那么,会影像到POST的表单页面的所有控件值无法读取,因为
2005-04-13 17:01:00 | [匿名:菩提树]
#re: Asp无组件上传带进度条(续) 编辑
网页不支持这个功能。您可以用vb写一个activeX支持这个功能
2005-04-11 10:12:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
怎么上传一个文件夹啊?
2005-04-10 23:38:00 | [匿名:bsmagic]
#re: Asp无组件上传带进度条(续) 编辑
附件要保存的目录存在么?
2005-04-08 16:09:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
ADODB.Stream (0x800A0BBC)
写入文件失败。
/1/Upload.asp, 第 548 行
怎么办?权限我都看过了,允许匿名登陆,写入也钩上了
2005-04-07 18:04:00 | [匿名:83348946]
#re: Asp无组件上传带进度条(续) 编辑
没有写入的权限,你在文件夹的属性里面的“安全”选项中,先把everyone的写入权限加上,如果没问题了就说明确实是权限问题,删除everyone帐号,把IIS访问帐号的权限加上即可!
2005-03-17 11:39:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
我用该上传时出现和龙龙一样提示,不知怎么改权限?请高手指示......
Microsoft VBScript 编译器错误 错误 '800a03f6'

缺少 'End'

/iisHelp/common/500-100.asp,行242

ADODB.Stream 错误 '800a0bbc'

写入文件失败。

/UpLOAD/upload/Upload.asp,行548


急盼!!!!!
2005-03-17 10:30:00 | [匿名:虫虫]
#re: Asp无组件上传带进度条(续) 编辑
如果可以追加,那么分块可以在服务器端
服务器端写临时文件
2005-03-03 12:00:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
asp调用stream的时候是可以追加的.
所以,分块传输是可以实现的.
我做过的一个可以指定分块大小,不过麻烦的是client的分块.
我使用javascript调用adostream来分块,然后用xmlhttp对象组织数据上传.服务器接受后根据请求文件名打开文件流,再追加.

问题是..client有安全提示......照我这种方法呢,client的进度条就由client来完成(javascript),在收到服务器确认的包的情况下更新进度.

能提供个好的cilent分块的方案吗?
2005-03-03 11:02:00 | [匿名:王暴徒]
#re: Asp无组件上传带进度条(续) 编辑
作为纯asp程序,只能做到这种程度了:(
2005-03-02 21:25:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
可以做到像yahoo.com.cn里的邮件附件上传一样快吗?真的好快。它是调用雅虎通的一个DLL

我的联系email liangzhunyu@yahoo.com.cn


你写的好好。。。
2005-03-02 17:42:00 | [匿名:梁准]
#re: Asp无组件上传带进度条(续) 编辑
对了~~还有就是怎么才能限制上传文件的类型呢?非常感谢您前边给我的回答!就是不知道ASP.NET好不好学啊!能留下您的QQ或者其他什么联系方式吗?
2005-02-24 11:22:00 | [匿名:tntlook]
#re: Asp无组件上传带进度条(续) 编辑
asp本身的局限,没办法,用asp.net吧:)
2005-02-24 09:57:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
你好~用了你的上传~很不错~就是有个问题,CPU占用很高啊~您能不能解决一下?
2005-02-24 02:38:00 | [匿名:tntlook]
#re: Asp无组件上传带进度条(续) 编辑
可能你是不是没有写入文件的权限?
2005-02-22 16:26:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
默认的那个例子是不保存的,注释里面有详细说明,同时里面还有好多个例子,你可以参考其他例子:)
2005-02-09 13:35:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
宝玉兄:我下载演示RAR上传后但不能保存,请指教:liyongjun98@21cn.com 万分感谢!!
2005-02-06 10:30:00 | [匿名:JUN]
#re: Asp无组件上传带进度条(续) 编辑
你下载源程序,里面有好几个例子的程序的。
demo.htm里面的是不保存的,其他的都保存到硬盘
2005-01-31 15:28:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
sdafsdafasf
2005-01-31 13:58:00 | [匿名:asfasfas]
#re: Asp无组件上传带进度条(续) 编辑
我看过了,也在UPLOAD.asp中添加了Path,但是不能保存,这是为什么?是我家的不对么?希望得到结果,期待中……
我的mail:java_class@163.com
2005-01-31 12:39:00 | [匿名:java_class]
#re: Asp无组件上传带进度条(续) 编辑
使用你的例子怎么不能上传呢?请指教!谢谢java_class@163.com
2005-01-28 16:58:00 | [匿名:java_class]
#re: Asp无组件上传带进度条(续) 编辑
哦,谢谢你的指教!
2005-01-08 17:40:00 | [匿名:starpan]
#re: Asp无组件上传带进度条(续) 编辑
可以作到,你可以每上传一块就进行分析,每上传完一个文件就保存一个,但是这样要复杂的多。

我现在是全部上传完,读到内存里面,然后分析保存。

最好的方式就是文件“追加”写入,每读一块,就追加写入文件。这样难度比较大一点,而且asp也不支持!
2005-01-08 17:24:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
哦,那能不能做到让他同步呢?谢谢!你写的很好!
2005-01-08 17:06:00 | [匿名:starpan]
#re: Asp无组件上传带进度条(续) 编辑
这个是因为上传完,服务器还要解析一段时间呢!
2005-01-08 17:02:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
请问宝玉:
进度条显示跟文件上传不同步怎么解决,也就是说进度条已经显示完了,而文件还没有上传完,还要等很长时间,请指教,我的邮件地址是starpan@126.com
2005-01-08 16:53:00 | [匿名:starpan]
#re: Asp无组件上传带进度条(续) 编辑
服务器必须支持ADODB.Stream
2004-12-21 16:05:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
我使用组件是提示说是服务器不支持,请问怎么解
不知道怎么配置服务器?
2004-12-21 15:15:00 | [匿名:guyfe]
#re: Asp无组件上传带进度条(续) 编辑
结果:

文件大小: 6499.6171875 KB

这...难道还有比byte更少的单位?别说bit
2004-12-21 13:39:00 | [匿名:Unruled Boy(灵感之源)]
#re: Asp无组件上传带进度条(续) 编辑
因为使用了XmlDom,如果您的不是IE5.5+,那么默认的Demo是有问题的

压缩包中有好几个例子,您可以看看其他例子。

2004-12-16 09:09:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
^_^
2004-12-13 12:18:00 | [匿名:#]
#re: Asp无组件上传带进度条(续) 编辑
服务器中毒了,即将恢复
2004-12-12 21:07:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
服务器中毒了,即将恢复
2004-12-12 21:07:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
宝玉你的cnforums.net怎么啦,好几天上不去了
2004-12-12 20:51:00 | [匿名:wang]
#re: Asp无组件上传带进度条(续) 编辑
嘿嘿,居然搞错了,已修正!
2004-12-12 16:03:00 | [匿名:宝玉]
#re: Asp无组件上传带进度条(续) 编辑
Q/A 正好写反了...
嘿嘿
2004-12-12 15:20:00 | [匿名:Zee]
#re: Asp无组件上传带进度条(续) 编辑
期待有asp.net的实现方案
2004-12-12 12:28:00 | [匿名:help]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0