仓酷云
标题:
ASP网页编程之使用ASP手艺完成文件间接上传功效
[打印本页]
作者:
分手快乐
时间:
2015-1-16 23:47
标题:
ASP网页编程之使用ASP手艺完成文件间接上传功能
由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。上传|上传择要:本文起首对照了几种罕见的文件上传手艺,然后经由过程实例先容了使用ASP手艺间接完成文件上传的详细办法。
关头词:ASP;文件上传;二进制数据
弁言
接纳WEB手艺完成B/S(扫瞄器/服务器)布局的办理体系是办公主动化的开展趋向。基于WEB手艺的办理体系,因为开辟周期短;与用户平台有关;易于完成交互式使用;能对信息举行疾速、高效的搜集、处置和公布,近几年来失掉了敏捷开展。而ASP手艺因为其开辟效力高、交互性好,平安性强等特性,渐渐成为开辟办理体系的首选工具。
很多基于WEB的使用都触及文件上传操纵。罕见的文件上传手艺有:基于HTTP协定的;基于VB(或DELPHI等编程言语)开辟的文件上传组件的;基于数据库手艺的等等。这些办法一样平常都必要编程者能同时把握WEB手艺、数据库手艺或CGI手艺或组件手艺,对编程者的请求较高。而本文将先容的使用ASP手艺间接完成文件上传功效则只需编程者把握单一的ASP手艺便可,年夜年夜下降了编程难度。
几种文件上传手艺的对照
1、基于HTTP协定
该办法必要编程者使用第三方软件,如DELPHI、VB等,在使用程序中先辈行HTTP协定编程,然后将待上传文件内容按HTTP协定的格局打包,最初向WEB服务器发奉上传的哀求报文,从而完成文件的上传。由于DELPHI和VB不克不及编写完全的WEB收集程序,只能编写WEB小使用程序,因而,该办法只用于功效受限的收集使用。
2、基于VB(或DELPHI等)开辟的文件上传组件
该办法使用VB(或DELPHI等编程言语)开辟ASP服务器组件,完成特定的文件上传服务。它起首使用ASP表单功效将文件(二进制格局)从用户端上传到服务器端,然后利用VB开辟的组件,对二进制文件举行处置,成为能够一般读写的文件。该办法请求编程者不但把握ASP言语,并且还能使用VB品级三方言语举行组件编程,增添了开辟的难度。
3、基于数据库手艺
该办法和上个办法有相似的地方。分歧的中央在于对上传的二进制文件的处置上。它利用数据库来保留二进制文件。不管是小型数据库仍是年夜型数据库都供应了存储二进制数据的数据范例,只需以AppendChunk体例将数据存进响应的字段就能够了。该办法固然复杂可行,可是由于每次上传的文件巨细都是纷歧样的,因而,会对数据库的空间形成很年夜的华侈,下降了数据的会见速率;而且使得文件只能在数据库情况下举行会见,形成了很年夜的方便。
实例剖析
可是,使用ASP手艺间接完成文件上传功效则只需编程者把握单一的ASP手艺便可,
年夜年夜下降了编程难度。上面我们将经由过程一个实例来先容怎样利用该办法。
1、文件上传表单
起首必要编写一个能供应文件上传功效的表单,程序以下所示:
<Formaction="upload.asp"method=postenctype="multipart/form-data">
上传文件:<Inputtype=filename=file1><br>
<inputtype=submitname=uploadvalue="上传">
</form>
个中,enctype参数用来设置表单的MIME编码体例,在举行文件(或同时包括文本框)上传时,必需将其属性设置为"multipart/form-data";upload.asp是服务器端对吸收到的二进制文件流举行处置的ASP程序,在本文的前面将连续先容其内容。
2、上传文件格局剖析
在处置文件之前,我们要先懂得上传的文件的详细格局,经由过程编写上面一段复杂的ASP程序就能够检察其二进制代码:
<%
filesize=Request.TotalBytes取得上传文件的巨细
filedata=Request.BinaryRead(filesize)取得上传文件的二进制数据
Response.BinaryWritefiledata在扫瞄器上显现二进制数据
%>
剖析扫瞄器上显现的上传文件的二进制代码,发明代码包含四个部分(若同时上传多个文件或文本框,则代码按上传的前后序次分列,格局不异),每部分的内容是用回车换行标记来举行分开的:
1)第一部分(肇端标记)
-----------------------------7d329631b04d4
2)第二部分(文件申明)
Content-Disposition:form-data;name="file1";filename="C:DocumentsandSettingsAdministratorMyDocumentsInvitation.doc"Content-Type:application/msword
在此,我们能够取得上传文件的文件称号及相对路径,也能够取得文件范例。这些信息是准确保留文件所不成短少的。
3)第三部分(文件内容)
即文件的二进制内容,略。
4)第四部分(停止标记)
-----------------------------7d329631b04d4
分离第一部分和第四部分的内容来看,"-----------------------------7d329631b04d4"(每次上传,数值都纷歧样)起到了支解符的感化,它标记着一段数据(当有多个上传内容时)的入手下手和停止。从保留文件所必要的信息来说,我们起首必要从第二部分数据的"filename"中取得文件称号,然后必要准确定位文件的肇端地位,最初使用ASP手艺将二进制文件用原本的文件名保留便可。若同时上传多个内容(如多个文本框和文件),也是按一样的办法处置,每部分的内容都包括在支解符当中,只是文本框和文件的体现情势稍有分歧,这能够经由过程详细剖析其二进制代码来懂得。
3、使用ASP手艺完成文件存储
上传文件代码的处置
1)取得支解符代码
从下面的剖析我们已晓得,支解符起到了支解多个数据段(包含文本框和各类范例的文件)的主要感化。后面已剖析过,支解符呈现在第一个回车换行标记前。因而,经由过程上面这段程序便可取得支解符代码:
<%
newline=chrB(13)&chrB(10)newline暗示二进制的回车符
filesize=Request.TotalBytesfilesize是上传文件的巨细
filedata=Request.BinaryRead(filesize)filedata是上传文件的二进制数据
divider=leftB(filedata,clng(instrb(filedata,newline))-1)divider是支解符
%>
注:由于这里处置的都是二进制字节码,因而,一切的函数都是利用它的二进制版本,加了"b"。
2)取得文件(或文本框)内容
(1)准备函数(将二进制串转化成字符串)
上传文件的内容不必要经由二进制向字符串的转换历程,间接保留便可。可是,若需提取文本框内容或文件的称号,就必需举行转换。因而,必要编写一个通用的,而且合用于汉字的转换函数。以下是该函数代码:
FunctionBtoS(bstr)
IfnotIsNull(bstr)Then
fori=0tolenb(bstr)-1
bchr=midb(bstr,i+1,1)
Ifascb(bchr)>127Then汉字是双字节,得两个字符一同处置
temp=temp&chr(ascw(midb(bstr,i+2,1)&bchr))
i=i+1
Else
temp=temp&chr(ascb(bchr))
EndIf
next
EndIf
BtoS=temp
EndFunction
(2)取得文件(或文本框)内容
在实践的WEB使用中,上传操纵大概触及多项内容,如多个文本框、多个文件等等。文件和文本框很好辨别,文件的数据中包括了"filename="字串。因而,我们写了以下的通用函数,既可用于提取文件内容,又可提取文本框内容(需举行二进制转换):
Functiongetdata(byvaldata,byvaldivider,final)data暗示二进制串;divider暗示支解符;final暗示数据的停止地位
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34)字符串"filename"的二进制暗示
bncrlf=chrb(13)&chrb(10)二进制的回车符
startpos=instrb(data,divider)+lenb(divider)+lenb(bncrlf)入手下手地位
endpos=instrb(startpos,data,divider)-lenb(bncrlf)停止地位
part1=midb(data,startpos,endpos-startpos)两个支解符之间的内容
firstline=midb(part1,1,instrb(part1,bncrlf)-1)内容之前的申明段
If(instrb(firstline,filename)=0)Then若为文本框,取得文本框字符串内容
stemp=midb(part1,instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(part1)-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata=BtoS(stemp)
Else若为文件,取得文件二进制内容
Getdata=midb(part1,instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(part1)
-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
EndIf
Final=endpos
Endfunction
在程序中间接挪用该函数</p>asp对于服务器的要求较高,一般的服务器如果访问量一大就垮了,不得不重启。
作者:
谁可相欹
时间:
2015-1-20 10:13
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
作者:
愤怒的大鸟
时间:
2015-1-29 06:44
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
作者:
深爱那片海
时间:
2015-1-30 15:00
虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
作者:
乐观
时间:
2015-2-2 22:38
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
作者:
admin
时间:
2015-2-8 18:40
我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.
作者:
变相怪杰
时间:
2015-2-25 22:08
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
作者:
小妖女
时间:
2015-3-8 07:11
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
作者:
再见西城
时间:
2015-3-15 21:07
还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。
作者:
若相依
时间:
2015-3-22 04:14
没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2