王朝网络
分享
 
 
 

用ASP和VBScript上载文件(二)

王朝asp·作者佚名  2006-12-16
宽屏版  字体: |||超大  

上载脚本的使用

下面是开发的上载脚本的应用范例。本文的下载文件提供例子中的文件和代码。将压缩文件释放到一个路径下,为你的网络服务器配置一个虚拟路径。可以在浏览器中测试和启动uploadForm.html。

调用脚本

下面是调用上载BuildUploadRequest 方法的途径。首先调用一个全程dictionary:UploadRequest。然后调用BuilUploadRequest方法,然后在自变量中传送到请求原始二进制数据。

byteCount = Request.TotalBytes

RequestBin = Request.BinaryRead(byteCount)

Dim UploadRequest

Set UploadRequest = CreateObject("Scripting.Dictionary")

BuildUploadRequest RequestBin

数据被分解并存储在dictionary对象中,并用Item() 方法恢复。这些item 数据可以保存在VBScript 变量中,并且可以在代码的任何地方使用。数据可以作为响应传送回客户机,或用在ASP代码中,或写进文件中及放入数据库中。

取回数据

UploadRequest 对象的数据可用Item("key") 函数进行存取。现在来考虑一下这样的情况:要存取一个 email控制的值。可以这样做:

email = UploadRequest.Item("email").Item("Value")

因为这是一个文本类控制,内容是一个字符串,这个字符串可以同任何其它VBScript 字符串一样使用。 对于二进制数据,可以用相同方法恢复内容:

picture = UploadRequest.Item("blob").Item("Value")

也可以存取其它信息,如文件名和content-type。他们是文本类控制。

contentType = UploadRequest.Item("blob").Item("ContentType")

filepathname = UploadRequest.Item("blob").Item("FileName")

在 VBScript 代码中使用数据

上载的数据可以同其它变量一样在VBScript 代码中使用。比如说,它们可以作为响应发送回客户机。

Your email is : 〈%=email%〉

File name of you picture is 〈%=filepathname%〉

File type of your picture is 〈%=contentType%〉

二进制数据也可以发送回客户机。必须设置一个content-type,可以用BinaryWrite 方法写二进制数据。

Response.ContentType = contentType Response.BinaryWrite picture

向文件中写入上载数据

在文件类控制的情况下,目的通常是将二进制数据存入某个文件或数据库域,而不是将它们传送回客户机。这个目的是上载文件的固有特点。使用FileSystem对象将上载文件存入服务器的文件系统中。

首先创建FileSystem对象:

’Create FileSytemObject Component Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

用FileSystem对象在路径中创建一个文件。路径可以是绝对的,直接指向文件系统(如c:\temp)。也可以是相对的,到网络服务器定义的一个虚拟路径下。用mappath方法和PATH_INFO服务器变量将虚拟路径影射到绝对路径。

Write方法需要一个双字节字符串作为自变量,所以要将单字节数列转换成字符串。Write方法负责转换这个双字节字符串,并用ASCII 格式写它。这就建立了一个包含我们原始的单字节字符串的二进制内容的文件。我已将这个文件命名为“uploaded+filename”,这只是为了区别文件,你可以使用任何其它文件名,如:

’Create and Write to a File Set MyFile = ScriptObject.CreateTextFile(Server.mappath(Request.ServerVariables _ ("PATH_INFO")) & "uploaded" & filename)

For i = 1 to LenB(value)

MyFile.Write chr(AscB(MidB(value, i, 1)))

Next

MyFile.Close

将上载数据存入数据库

数据还可以被存入数据库。content-type 也应该存入数据库中,以便以后显示数据。首先要建立与数据库的连接,假定已经设置了适当的DSN:

Set conn = Server.CreateObject("ADODB.Connection")

conn.open "DSN=wroxdns","user","pass"

然后从连接中创建记录集:

sql = "SELECT PHOTO, CONTENTTYPE FROM MYTABLE"

Set rs = Server.CreateObject("ADODB.Recordset")

rs.Open sql, conn, 3, 3

记录集创建之后,要将二进制数据放入数据库的blob域中:

picturechunk = picture & chrB(0)

rs.Fields("PICTURE").appendChunk picturechunk

rs.Fields("CONTENTTYPE") = contentType

rs.Update

conn.close

在appendChunk 方法中,我不得不解决一个臭虫。事实上我注意到,当二进制数据有奇数字节时,appendChunk 方法就不传送最后一个字节。解决的办法是增加一个chr(0),以确保传送了所有的字节。也许还有其它办法,如果有的话,请告诉我。

要得到数据库的映象,使用相同的记录集,并用正确的内容类型将它作为响应发送回客户机。

Response.contentType = rs.Fields("CONTENTTYPE")

size = rs.Fields("PICTURE").ActualSize

blob = rs.Fields("PICTURE").GetChunk(size)

Response.binarywrite blob

结论

本文展现了一个完整的用VBScript 进行文件上载的方法。编码完全是VBScript ,独立于第三方产品。

首先集中介绍上载的过程(用" multipart/form-data "型内容进行HTML传递)。然后详细介绍上载的 VBScript代码。开始时对操作字符串和单字节数列的VBScript函数进行简要回顾。然后介绍了脚本的代码 以及上载数据的结构。

最后显示了这个脚本的多个用途,从使用ASP代码中的上载变量到数据库或文件系统中存储上载文件。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有