仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2530|回复: 20
打印 上一主题 下一主题

[学习教程] ASP编程:Asp无组件上传进度条处理计划

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:37:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。处理|上传|无组件   1、无组件上传的道理
我仍是一点一点用一个实例来讲明的吧,客户端HTML以下。要阅读上传附件,咱们经由过程<input type="file">元素,然而必定要注重必需设置form的enctype属性为"multipart/form-data":


<form method="post" action="upload.asp" enctype="multipart/form-data">
<label>
<input type="file" name="file1" />
</label>
<br />
<input type="text" name="filename" value="default filename"/>
<br />
<input type="submit" value="Submit"/>
<input type="reset" value="Reset"/>
</form>


在后台asp法式中,之前获得表单提交的ASCII 数据,十分的轻易。然而假如需求获得上传的文件,就必需利用Request对象的BinaryRead办法来读取。BinaryRead办法是对以后输出流停止指定字节数的二进制读取,有点需求注重的是,一旦利用BinaryRead 办法后,不再能利用Request.Form 或 Request.QueryString 纠合了。联合Request对象的TotalBytes属性,可以将一切表单提交的数据全体酿成二进制,不外这些数据都是经由编码的。起首让咱们来看看这些数据是若何编码的,有没有甚么纪律可循,编段代码,在代码中咱们将BinaryRead读取的二进制转化为文本,输入出来,在后台的upload.asp中(注重该示例不要上传大文件,不然能够会形成阅读器逝世失落):
<%
Dim biData, PostData
Size = Request.TotalBytes
biData = 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.Close
End Function
%>


复杂起见,上传一个最复杂的文本文件(G:\homepage.txt,内容为"宝玉:http://www.webuc.net";)来实验一下,文本框filename中保存默许值"default filename",提交看看输入了局:

-----------------------------7d429871607fe
Content-Disposition: form-data; name="file1"; filename="G:\homepage.txt"
Content-Type: text/plain
宝玉:http://www.webuc.net
-----------------------------7d429871607fe
Content-Disposition: form-data; name="filename"
default filename
-----------------------------7d429871607fe--

可以看出来关于表单中的项目,是用过"-----------------------------7d429871607fe"如许的界限来分隔成一块一块的,每块的入手下手都有一些描写信息,例如:Content-Disposition: form-data; name="filename",在描写信息中,经由过程name="filename"可以晓得表单项的name。假如有filename="G:\homepage.txt"如许的内容,申明是一个上传的文件,假如是一个上传的文件,那末枋鲂畔⒒岫嘁恍Content-Type: text/plain来描写文件的Content-Type。描写信息和主体信息之间是经由过程换行来分隔的。

嗯,根基上明晰了,依据这个纪律咱们就晓得该怎样来分别数据,再对分别的数据停止处置了,不外差点疏忽一个成绩,就是界限值(上例中的"-----------------------------7d429871607fe")是怎样晓得的?每次上传这个界限值是纷歧样的,还好还好asp中可以经由过程Request.ServerVariables( "HTTP_CONTENT_TYPE")来获之,例如上例中HTTP_CONTENT_TYPE内容为:"multipart/form-data; boundary=---------------------------7d429871607fe",有了这个,咱们不但可以判别客户真个form中有没有利用enctype="multipart/form-data"(假如没有利用,那末上面就没需要履行啦),还可以获得界限值boundary=---------------------------7d429871607fe。(注重:这里获得的界限值比下面的界限值开首要少"--",最好增补上。)

至于若何剖析数据的进程我就不多赘述了,不过就是借助InStr,Mid等如许的函数来分别出来咱们想要的数据。

2、分块上传,纪录进度
要及时反应进度条,本色就是要及时晓得以后办事器获得了几何数据?再回忆一下咱们完成上传的进程,咱们是经由过程Request.BinaryRead(Request.TotalBytes)来完成的,在Request的过程当中咱们没法得知以后办事器获得了几何数据。所以只能经由过程变通的办法了,假如咱们可以将获得的数据分红一块一块的,然后依据已上传的块数咱们就能够算出来以后上传了多大了!也就是说,假如我1K为1块,那末上传1MB的输出流就分红1024块来获得,例如我以后已获得了100块,那末就标明以后上传了100K。当我提出分块的时分良多人感觉难以想象,由于他们都疏忽BinaryRead办法不但是可以读取指定巨细,并且可以一连读取的。

写个例子来验证一下分块读取的完全性,在方才的例子基本上(注重该示例不要上传大文件,不然能够会形成阅读器逝世失落):

<%
Dim biData, PostData, TotalBytes, ChunkBytes
ChunkBytes = 1 * 1024 ' 分块巨细为1K
TotalBytes = 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 = TotalBytes
Loop
Response.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.Close
End Function
%>

实验一下上传方才的文本文件,输入了局证实如许分块读取的内容是完全的,而且在While轮回中,咱们可以在每次轮回时将以后形态纪录到Application中,然后咱们就能够经由过程会见该Application静态获得</p>  ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于Windows NT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,哪么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失;
飘灵儿 该用户已被删除
沙发
发表于 2015-2-4 03:53:38 | 只看该作者
我想问如何掌握学习节奏(先学什么再学什么)最好详细点?
小女巫 该用户已被删除
板凳
发表于 2015-2-7 23:14:58 | 只看该作者
用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
若天明 该用户已被删除
地板
发表于 2015-2-18 23:44:19 | 只看该作者
用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
兰色精灵 该用户已被删除
5#
发表于 2015-2-22 13:53:10 | 只看该作者
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
再见西城 该用户已被删除
6#
发表于 2015-3-3 21:01:52 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
变相怪杰 该用户已被删除
7#
发表于 2015-3-11 13:17:26 | 只看该作者
运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-12 14:52:46 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
透明 该用户已被删除
9#
发表于 2015-3-13 10:07:34 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
蒙在股里 该用户已被删除
10#
发表于 2015-3-16 00:58:20 | 只看该作者
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
透明 该用户已被删除
11#
发表于 2015-3-16 02:56:58 | 只看该作者
跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
小妖女 该用户已被删除
12#
发表于 2015-3-20 04:30:15 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
简单生活 该用户已被删除
13#
发表于 2015-3-20 08:56:41 | 只看该作者
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
山那边是海 该用户已被删除
14#
 楼主| 发表于 2015-3-27 07:10:19 | 只看该作者
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
灵魂腐蚀 该用户已被删除
15#
发表于 2015-4-7 21:16:17 | 只看该作者
掌握asp的特性而且一定要知道为什么。
老尸 该用户已被删除
16#
发表于 2015-4-8 20:44:51 | 只看该作者
不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍
爱飞 该用户已被删除
17#
发表于 2015-4-10 08:14:36 | 只看该作者
不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍
因胸联盟 该用户已被删除
18#
发表于 2015-4-16 21:12:03 | 只看该作者
如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。
活着的死人 该用户已被删除
19#
发表于 2015-4-21 18:13:27 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
冷月葬花魂 该用户已被删除
20#
发表于 2015-4-27 22:49:22 | 只看该作者
下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 20:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表