综合二区_欧美成人综合_欧美成人二区_a黄视频_亚洲视频在线播放_一区二区三区视频免费看

当前位置:首页 > 网站旧栏目 > 学习园地 > 程序开发教程 > ASP无组件上传进度条解决方案

ASP无组件上传进度条解决方案
2010-01-15 12:52:40  作者:天极网  来源:天机网
一、无组件上传的原理

我还是一点一点用一个实例来说明的吧,客户端HTML如下。要浏览上传附件,我们通过<input type="file">元素,但是一定要注意必须设置form的enctype属性为"multipart/form-data":
<form method="post" action="upload.asp" enctype="multipart/form-data"> <br> <label> <br> <input type="file" name="file1" /> <br> </label> <br> <br /> <br> <input type="text" name="filename" value="default filename"/> <br> <br /> <input type="submit" value="Submit"/> <br> <input type="reset" value="Reset"/> <br> </form>
后台asp程序中,以前获取表单提交的ASCII 数据,非常的容易。但是如果需要获取上传的文件,就必须使用Request对象的BinaryRead方法来读取。BinaryRead方法是对当前输入流进行指定字节数的二进制读取,有点需要注意的是,一旦使用BinaryRead 方法后,再也不能使用Request.Form 或 Request.QueryString 集合了。结合Request对象的TotalBytes属性,可以将所有表单提交的数据全部变成二进制,不过这些数据都是经过编码的。首先让我们来看看这些数据是如何编码的,有无什么规律可循,编段代码,在代码中我们将BinaryRead读取的二进制转化为文本,输出出来,在后台的upload.asp中(注意该示例不要上传大文件,否则可能会造成浏览器死掉):

<%Dim biData, PostDataSize = Request.TotalBytesbiData = Request.BinaryRead(Size)PostData = BinaryToString(biData,Size)Response.Write " <pre> " & PostData & " </pre> "
'使用pre,原样输出格式
' 借助RecordSet将二进制流转化成文本
Function BinaryToString(biData,Size) Const adLongVarChar = 201 Set RS = CreateObject("ADODB.Recordset") RS.Fields.Append "mBinary", adLongVarChar, Size RS.Open RS.AddNew RS("mBinary").AppendChunk(biData) RS.Update BinaryToString = RS("mBinary").Value RS.CloseEnd Function %>
简单起见,上传一个最简单的文本文件(G:\homepage.txt,内容为"宝玉:http://www.webuc.net")来试验一下,文本框filename中保留默认值"default filename",提交看看输出结果:
二、分块上传,记录进度
要实时反映进度条,实质就是要实时知道当前服务器获取了多少数据?再回想一下我们实现上传的过程,我们是通过Request.BinaryRead(Request.TotalBytes)来实现的,在Request的过程中我们无法得知当前服务器获取了多少数据。所以只能通过变通的方法了,如果我们可以将获取的数据分成一块一块的,然后根据已经上传的块数我们就可以算出来当前上传了多大了!也就是说,如果我1K为1块,那么上传1MB的输入流就分成1024块来获取,例如我当前已经获取了100块,那么就表明当前上传了100K。当我提出分块的时候很多人觉得不可思议,因为他们都忽略BinaryRead方法不仅是可以读取指定大小,而且可以连续读取的。

写个例子来验证一下分块读取的完整性,在刚才的例子基础上(注意该示例不要上传大文件,否则可能会造成浏览器死掉):
 <%Dim biData, PostData, TotalBytes, ChunkBytesChunkBytes = 1 * 1024
' 分块大小为1KTotalBytes = Request.TotalBytes
' 总大小PostData = ""
' 转化为文本类型后的数据ReadedBytes = 0
' 初始化为0
' 分块读取Do While ReadedBytes < TotalBytes biData = Request.BinaryRead(ChunkBytes)
' 当前块 PostData = PostData & BinaryToString(biData,ChunkBytes)
' 将当前块转化为文本并拼接 ReadedBytes = ReadedBytes + ChunkBytes
' 记录已读大小
If ReadedBytes > TotalBytes Then ReadedBytes = TotalBytesLoopResponse.Write " <pre> " & PostData & " </pre> "
' 使用pre,原样输出格式
' 将二进制流转化成文本
Function BinaryToString(biData,Size) Const adLongVarChar = 201 Set RS = CreateObject("ADODB.Recordset") RS.Fields.Append "mBinary", adLongVarChar, Size RS.Open RS.AddNew RS("mBinary").AppendChunk(biData) RS.Update BinaryToString = RS("mBinary").Value RS.CloseEnd Function %>


 


安徽新华电脑学校专业职业规划师为你提供更多帮助【在线咨询
主站蜘蛛池模板: 国产区h| 国产二区精品视频 | 天天爽夜夜爽人人爽一区二区 | 中文字幕不卡一区 | 新91在线视频 | 在线免费看毛片 | 亚洲一级无毛 | 男人网站视频 | 91影视| 久久久精品久久 | 91视频污版| 亚洲精品美女久久久久99 | www.91视频com| 91精品在线观看入口 | 亚洲综合四区 | 国产成人毛片 | 亚洲黄色性视频 | 亚洲国产欧美91 | 午夜天堂在线视频 | 99视频在线看 | 国产日韩一区 | 91亚洲国产亚洲国产亚洲 | 中文精品久久久 | 中文字幕精品久久一二三区红杏 | 竹内纱里奈69av在线 | 亚洲美女在线播放 | 亚洲一区二区三区四区在线 | 亚洲精品少妇一区二区 | 中文字幕久久一区 | 91啦在线视频 | 一区二区三区久久 | 一区二区三区免费视频网站 | 国产精品精品久久久久久 | 伦在线| 亚洲精品在线视频观看 | 亚洲美女在线一区 | 大伊人狠狠躁夜夜躁av一区 | 九九九热精品免费视频观看网站 | 午夜免费看毛片 | 91视频在线网站 | 国产成人毛片 |