仓酷云

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

[学习教程] ASP网页编程之无组件文件上传代码实例

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-16 00:25:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
ASP在国内异常流行,因为国内大多使用的是盗版的Windows和盗版的SQLServer,而ASP+COM+SQLServer实际上也是一种不错的搭配,其性能也不输于PHP+MYSQL,特别是Windows系统和SQLServer都有图形界面,比APACHE和MYSQL易于维护,因此对于不重视知识产权的国家来说也是一种不错的选择。上传|无组件   
    关于无组件文件上传的文章已良多了,所以在这里我不想再注释无组件文件上传的道理。在ASP中没法将二进制文件数据直接保留成文件,所以咱们普通仍是使用数据库来保留用户上传的文件。

1。数据库表布局(Access):
UserID:Text(保留上传文件的用户ID)
FileContentType:Text(用来保留上传文件的类型,eg:"Application/msword",次要用来利用户能准确下载此文件)
FileContent:OLE Object(保留文件数据)
2。HTML文件
muploadfile.htm
<Form name="upload_file" enctype="multipart/form-data" action="muploadfile.asp" method=post>
<input type=hidden name="UserID" value="abc">
<input type=hidden name="FileUploadStart"> '这里用来暗示入手下手文件数据上传
File to send: <BR>
<INPUT TYPE="file" name="file_up" size="30"><br>
<INPUT TYPE="file" name="file_up" size="30"><br>
<input type=hidden name="FileUploadEnd"> '这里用来暗示文件数据停止
<input type=submit value=Submit>
</Form>
3。ASP文件
muploadfile.asp
<%
Response.Expires=0
Function bin2str(binstr)
Dim varlen,clow,ccc,skipflag
skipflag=0
ccc = ""
If Not IsNull(binstr) Then
varlen=LenB(binstr)
For i=1 To varlen
If skipflag=0 Then
clow = MidB(binstr,i,1)
If AscB(clow) > 127 Then
ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow))
skipflag=1
Else
ccc = ccc & Chr(AscB(clow))
End If
Else
skipflag=0
End If
Next
End If
bin2str = ccc
End Function

varByteCount = Request.TotalBytes
bnCRLF = chrB( 13 ) & chrB( 10 )
binHTTPHeader=Request.BinaryRead(varByteCount)
Divider = LEFTB( binHTTPHeader, INSTRB( binHTTPHeader, bnCRLF ) - 1 )
'入手下手读非文件域的数据
Do while lenB(binHTTPHeader)>46

binHeaderData = LeftB(binHTTPHeader, INSTRB( binHTTPHeader, bnCRLF & bnCRLF )-1)
strHeaderData=bin2str(binHeaderData)
lngFieldNameStart=Instr(strHeaderData,"name="&chr(34))+Len("name="&chr(34))
lngFieldNameEnd=Instr(lngFieldNameStart,strHeaderData,chr(34))


strFieldName=Mid(strHeaderData,lngFieldNameStart,lngFieldNameEnd-lngFieldNameStart)
strFieldName=Trim(strFieldName)
strFieldName=WordStr(strFieldName,vbcrlf,vbnullstring)

'判别文件数据时分入手下手
If strComp(strFieldName,"FileUploadStart",1)=0 Then
binHTTPHeader=MIDB(binHTTPHeader,INSTRB( DataStart + 1, binHTTPHeader, divider ))
exit do
End if

DataStart = INSTRB( binHTTPHeader, bnCRLF & bnCRLF ) + 4
DataEnd = INSTRB( DataStart + 1, binHTTPHeader, divider ) - DataStart
binFieldValue=MIDB( binHTTPHeader, DataStart, DataEnd )
strFieldValue=bin2str(binFieldValue)
strFieldValue=Trim(strFieldValue)
strFieldValue=WordStr(strFieldValue,vbcrlf,vbnullstring)
'非文件上传域变量赋值
execute strFieldName&"="""&strFieldValue&""""


binHTTPHeader=MIDB(binHTTPHeader,INSTRB( DataStart + 1, binHTTPHeader, divider ))

loop
'入手下手处置文件数据
Do while lenB(binHTTPHeader)>46


binHeaderData = LeftB(binHTTPHeader, INSTRB( binHTTPHeader, bnCRLF & bnCRLF )-1)

strHeaderData=bin2str(binHeaderData)

'读取上传文件的Content-Type
lngFileContentTypeStart=Instr(strHeaderData,"Content-Type:")+Len("Content-Type:")
strFileContentType=Trim(Mid(strHeaderData,lngFileContentTypeStart))
strFileContentType=WordStr(strFileContentType,vbCRLF,vbNullString)

'读取上传的文件名
lngFileNameStart=Instr(strHeaderData,"filename="&chr(34))+Len("filename="&chr(34))
lngFileNameEnd=Instr(lngFileNameStart,strHeaderData,chr(34))
strFileName=Mid(strHeaderData,lngFileNameStart,lngFileNameEnd-lngFileNameStart)
strFileName=Trim(strFileName)
strFileName=WordStr(strFileName,vbCRLF,vbNullString)

'读取上传文件数据
DataStart = INSTRB( binHTTPHeader, bnCRLF & bnCRLF ) + 4
DataEnd = INSTRB( DataStart + 1, binHTTPHeader, divider ) - DataStart

If strFileName<>"" Then

binFieldValue=MIDB( binHTTPHeader, DataStart, DataEnd )

'将上传的文件写入数据库
set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DSN=abc"

SQL="select * from User_File"
set rs=server.CreateObject("ADODB.Recordset")
rs.Open sql,conn,3,3
rs.addnew
rs("UserID")=UserID
rs("FileContentType")=strFileContentType
rs("FileContent").AppendChunk binFieldValue
rs.update
rs.close
set rs=Nothing
conn.Close
set conn=Nothing

End if

binHTTPHeader=MIDB(binHTTPHeader,INSTRB( DataStart + 1, binHTTPHeader, divider ))

loop
%>
4。下载用户上传的文件
<%
Response.Buffer = true
Response.Clear
UserID=request("UserID")
Set conn=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
conn.open "DSN=UploadFile"
rs.open "select * from User_File where UserID='"&UserID&"'",conn,3,3
Response.ContentType = rs("FileContentType")
lngOffset=0
conChunkSize=1024
lngPictSize=rs("FileContent").ActualSize
Do While lngOffset < lngPictSize
varChunk = rs("FileContent").GetChunk(conChunkSize)
Response.BinaryWrite varChunk
lngOffset = lngOffset + conChunkSize
If lngOffset > lngPictSize Then Exit Do
Loop
rs.close
set rs=Nothing
conn.close
set conn=nothing
%>
就是这些了,但愿此办法对人人能有所匡助。:)

  使用cdonts,可以发送、查看邮件,实现webmail的功能。结合wsh,可以实现对nt主机的管理,如nt用户管理、iis虚拟主机设置、exchange邮箱设置等等,就像管理本地机一样方便。
简单生活 该用户已被删除
沙发
发表于 2015-2-16 01:13:45 | 只看该作者
跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
兰色精灵 该用户已被删除
板凳
发表于 2015-2-16 21:33:09 | 只看该作者
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
爱飞 该用户已被删除
地板
发表于 2015-2-16 23:17:44 | 只看该作者
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
金色的骷髅 该用户已被删除
5#
发表于 2015-2-21 10:25:48 | 只看该作者
Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write
冷月葬花魂 该用户已被删除
6#
发表于 2015-3-1 19:32:48 | 只看该作者
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
深爱那片海 该用户已被删除
7#
发表于 2015-3-10 22:32:14 | 只看该作者
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
透明 该用户已被删除
8#
 楼主| 发表于 2015-3-14 01:16:58 | 只看该作者
先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-16 21:30:55 | 只看该作者
你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
柔情似水 该用户已被删除
10#
发表于 2015-3-17 01:08:00 | 只看该作者
跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
莫相离 该用户已被删除
11#
发表于 2015-3-20 13:46:37 | 只看该作者
尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。
愤怒的大鸟 该用户已被删除
12#
发表于 2015-3-27 09:10:56 | 只看该作者
不能只是将它停留在纸上谈兵的程度上。
飘飘悠悠 该用户已被删除
13#
发表于 2015-3-27 16:09:49 | 只看该作者
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
小女巫 该用户已被删除
14#
发表于 2015-4-4 10:30:21 | 只看该作者
尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。
若相依 该用户已被删除
15#
发表于 2015-4-6 04:46:33 | 只看该作者
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
只想知道 该用户已被删除
16#
发表于 2015-4-8 01:39:00 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
再现理想 该用户已被删除
17#
发表于 2015-4-12 21:45:04 | 只看该作者
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
蒙在股里 该用户已被删除
18#
发表于 2015-4-24 01:34:46 | 只看该作者
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
小魔女 该用户已被删除
19#
发表于 2015-5-12 09:31:17 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
海妖 该用户已被删除
20#
发表于 2015-6-12 22:51:39 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-28 07:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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