几个月前,写过一篇关于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技术
目前致力于
留言反馈
如下:
ADODB.Stream ?? '800a0bbc'
请问这是什么问题,能不能帮忙解答一下.谢谢了
顶你!!!
写入文件失败。
?,行 0
请问这是什么问题,能不能帮忙解答一下.谢谢了
试图访问的网页出现问题,无法显示。
--------------------------------------------------------------------------------
请尝试执行下列操作:
单击刷新按钮,或稍后重试。
打开 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
请问这样的错误怎么解决呀?
所以才写入文件失败。
写入文件失败。
/bgxt/bgxt/xjyb/upload_5xsoft.inc,行181
我的email:fancyfreeboy428@163.com
写入文件失败。
/upload_5xsoft.inc,行 175
我也不会这个问题 ,多谢大侠,帮忙
写入文件失败。
/upload_5xsoft.inc,行 175
有些不太完美,有人知道解决方法么?
谢谢。
写入文件失败。
/admin/incupload.asp,行 161
权限我都开了,文件夹也有,还要怎么弄啊???
这问题有人知道吗??
写入文件失败。
/admin/incupload.asp,行 161
权限我都开了,文件夹也有,还要怎么弄啊???
例子很全,所有的问题其实看下例子或按自己实际环境修改一下就可以了嘛。
也就是说如果在DEMO.THM里增加一个<input type=text name=ab value=123>
如何在DEMO.ASP里获取这个植啊.
Microsoft VBScript 运行时错误 错误 '800a01b6'
对象不支持此属性或方法: 'Form'
/up/UpLoad.asp,行34
那偶就借来用用啦~~~ 记得很早你就传过给偶了?
错误类型:
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
Dim RequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo
改成:
Dim RequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart
Dim oFileInfo
2. 如果上传太快也可能不产生
如果使用者上传的文件大小超过了系统所限,那么,会影像到POST的表单页面的所有控件值无法读取,因为
写入文件失败。
/1/Upload.asp, 第 548 行
怎么办?权限我都看过了,允许匿名登陆,写入也钩上了
Microsoft VBScript 编译器错误 错误 '800a03f6'
缺少 'End'
/iisHelp/common/500-100.asp,行242
ADODB.Stream 错误 '800a0bbc'
写入文件失败。
/UpLOAD/upload/Upload.asp,行548
急盼!!!!!
服务器端写临时文件
所以,分块传输是可以实现的.
我做过的一个可以指定分块大小,不过麻烦的是client的分块.
我使用javascript调用adostream来分块,然后用xmlhttp对象组织数据上传.服务器接受后根据请求文件名打开文件流,再追加.
问题是..client有安全提示......照我这种方法呢,client的进度条就由client来完成(javascript),在收到服务器确认的包的情况下更新进度.
能提供个好的cilent分块的方案吗?
我的联系email liangzhunyu@yahoo.com.cn
你写的好好。。。
demo.htm里面的是不保存的,其他的都保存到硬盘
我的mail:java_class@163.com
我现在是全部上传完,读到内存里面,然后分析保存。
最好的方式就是文件“追加”写入,每读一块,就追加写入文件。这样难度比较大一点,而且asp也不支持!
进度条显示跟文件上传不同步怎么解决,也就是说进度条已经显示完了,而文件还没有上传完,还要等很长时间,请指教,我的邮件地址是starpan@126.com
不知道怎么配置服务器?
文件大小: 6499.6171875 KB
这...难道还有比byte更少的单位?别说bit
压缩包中有好几个例子,您可以看看其他例子。
嘿嘿