仓酷云

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

[学习教程] ASP网页设计ASP撑持中文的无组件文件上传

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:37:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
asp对于服务器的要求较高,一般的服务器如果访问量一大就垮了,不得不重启。文件名:upload.inc
申明:撑持中文的无组件文件上传ASP函数,因为ASP不撑持二进制写进文件,以是存成文件时必需利用组件,本函数只供应截取上传文件的数据,能够写进到数据库。

<SCRIPTRUNAT=SERVERLANGUAGE=VBSCRIPT>
FunctionGetUpload(FormData)

DimDataStart,DivStr,DivLen,DataSize,FormFieldData
分开标记串(+CRLF)
DivStr=LeftB(FormData,InStrB(FormData,str2bin(VbCrLf))+1)
分开标记串长度
DivLen=LenB(DivStr)
PosOpenBoundary=InStrB(FormData,DivStr)
PosCloseBoundary=InStrB(PosOpenBoundary+1,FormData,DivStr)
SetFields=CreateObject("Scripting.Dictionary")

WhilePosOpenBoundary>0AndPosCloseBoundary>0
name肇端地位(name="xxxxx"),加6是由于[name="]长度为6
FieldNameStart=InStrB(PosOpenBoundary,FormData,str2bin("name="))+6
FieldNameSize=InStrB(FieldNameStart,FormData,ChrB(34))-FieldNameStart(")的ASC值=34
FormFieldName=bin2str(MidB(FormData,FieldNameStart,FieldNameSize))

filename肇端地位(filename="xxxxx")
FieldFileNameStart=InStrB(PosOpenBoundary,FormData,str2bin("filename="))+10
IfFieldFileNameStart<PosCloseBoundaryAndFieldFileNameStart>PosopenBoundaryThen
FieldFileNameSize=InStrB(FieldFileNameStart,FormData,ChrB(34))-FieldFileNameStart(")的ASC值=34
FormFileName=bin2str(MidB(FormData,FieldFileNameStart,FieldFileNameSize))
Else
FormFileName=""
EndIf

Content-Type肇端地位(Content-Type:xxxxx)
FieldFileCTStart=InStrB(PosOpenBoundary,FormData,str2bin("Content-Type:"))+14
IfFieldFileCTStart<PosCloseBoundaryAndFieldFileCTStart>PosOpenBoundaryThen
FieldFileCTSize=InStrB(FieldFileCTStart,FormData,str2bin(VbCrLf&VbCrLf))-FieldFileCTStart
FormFileCT=bin2str(MidB(FormData,FieldFileCTStart,FieldFileCTSize))
Else
FormFileCT=""
EndIf

数据肇端地位:2个CRLF入手下手
DataStart=InStrB(PosOpenBoundary,FormData,str2bin(VbCrLf&VbCrLf))+4
IfFormFileName<>""Then
数据长度,减1是由于数据文件的存取字节数成绩(多是AppendChunk办法的成绩):
因为字节数为奇数的图像存到数据库时会往失落最初一个字符招致图像不克不及准确显现,
字节数为偶数的数据文件就不会呈现这个成绩,因而必需坚持字节数为偶数。
DataSize=InStrB(DataStart,FormData,DivStr)-DataStart-1
FormFieldData=MidB(FormData,DataStart,DataSize)
Else
数据长度,减2是由于分开标记串前有一个CRLF
DataSize=InStrB(DataStart,FormData,DivStr)-DataStart-2
FormFieldData=bin2str(MidB(FormData,DataStart,DataSize))
EndIf

创建一个Dictionary集存储Form中各个Field的相干数据
SetField=CreateUploadField()
Field.Name=FormFieldName
Field.FilePath=FormFileName
Field.FileName=GetFileName(FormFileName)
Field.ContentType=FormFileCT
Field.Length=LenB(FormFieldData)
Field.Value=FormFieldData

Fields.AddFormFieldName,Field

PosOpenBoundary=PosCloseBoundary
PosCloseBoundary=InStrB(PosOpenBoundary+1,FormData,DivStr)
Wend
SetGetUpload=Fields
EndFunction

把二进制字符串转换成一般字符串函数
Functionbin2str(binstr)
Dimvarlen,clow,ccc,skipflag
中笔墨符Skip标记
skipflag=0
ccc=""
IfNotIsNull(binstr)Then
varlen=LenB(binstr)
Fori=1Tovarlen
Ifskipflag=0Then
clow=MidB(binstr,i,1)
判别是不是中文的字符
IfAscB(clow)>127Then
AscW会把二进制的中文双字节字符高位和低位反转,以是要先把中文的上下位反转
ccc=ccc&Chr(AscW(MidB(binstr,i+1,1)&clow))
skipflag=1
Else
ccc=ccc&Chr(AscB(clow))
EndIf
Else
skipflag=0
EndIf
Next
EndIf
bin2str=ccc
EndFunction


把一般字符串转成二进制字符串函数
Functionstr2bin(varstr)
str2bin=""
Fori=1ToLen(varstr)
varchar=mid(varstr,i,1)
varasc=Asc(varchar)
asc对中笔墨符求出来的值大概为正数,
加上65536便可求出它的无标记数值
-1在呆板内是用补码暗示的0xffff,
其无标记值为65535,65535=-1+65536
其他正数顺次类推。
Ifvarasc<0Then
varasc=varasc+65535
EndIf
对中文的处置:把双字节低位和高位分隔
Ifvarasc>255Then
varlow=Left(Hex(Asc(varchar)),2)
varhigh=right(Hex(Asc(varchar)),2)
str2bin=str2bin&chrB("&H"&varlow)&chrB("&H"&varhigh)
Else
str2bin=str2bin&chrB(AscB(varchar))
EndIf
Next
EndFunction

获得文件名(往失落Path)
FunctionGetFileName(FullPath)
IfFullPath<>""Then
FullPath=StrReverse(FullPath)
FullPath=Left(FullPath,InStr(1,FullPath,"")-1)
GetFileName=StrReverse(FullPath)
Else
GetFileName=""
EndIf
EndFunction
</SCRIPT>
<SCRIPTRUNAT=SERVERLANGUAGE=JSCRIPT>
functionCreateUploadField(){returnnewuf_Init()}
functionuf_Init(){
this.Name=null
this.FileName=null
this.FilePath=null
this.ContentType=null
this.Value=null
this.Length=null
}
</SCRIPT>问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时.
若相依 该用户已被删除
沙发
发表于 2015-1-19 19:20:46 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-28 09:43:43 | 只看该作者
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
谁可相欹 该用户已被删除
地板
发表于 2015-2-5 20:24:48 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
再见西城 该用户已被删除
5#
发表于 2015-2-13 12:51:29 | 只看该作者
接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
莫相离 该用户已被删除
6#
发表于 2015-3-3 21:22:11 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
变相怪杰 该用户已被删除
7#
发表于 2015-3-11 13:53:29 | 只看该作者
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
小魔女 该用户已被删除
8#
发表于 2015-3-18 15:57:10 | 只看该作者
下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助...
柔情似水 该用户已被删除
9#
发表于 2015-3-26 02:55:01 | 只看该作者
运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 19:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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