我用chinaASP的文件上传组件把zip或doc文件存到了SQL Server的数据库中,怎样把它读出来并在页面提供下载呢

该组件的说明是:
China ASP File Upload Component for ASP Beta 3 (build 33)
Copyrigt (C) China ASP , 1999 All Right Reserved

--------------------------------------------------------------------------------
许可协议

请参阅license.txt

功能简介

支持上传多个文件

可以将上传的文件改名保存

可以同时使用其它的form input,携带附加的信息,例如,文件说明。

可以判断上传文件的大小、文件类型

支持将文件内容保存进数据库

无需IIS将目录设置为Write(如果是NTFS文件系统,其安全性需要设置,可以简单的设置为everyone full control,或者设置为IUSR_SERVER full control)

适用系统

适用于 NT4.0 server 中文版 + IIS 4

组件属性

Files
只读
返回一个Collection对象,包含上传文件的信息(ContentType、文件名、上传Form内的Input名称、文件大小、及文件的两进制内容)

Form
只读
返回一个Collection对象,包含上传form内其他类型input(text/button等)的内容(form内input名称、该input的value)

UsedTime
只读
Com处理上传信息所使用的时间

CopyrightInfo
只读
版权信息

Files元素的属性

controlName
只读
上传Form内对应的file类型input的名称

IsEmpty
只读
是否是Empty,如果上传Form的file类型的input没有输入任何路径,则上传后其对应的files元素的IsEmpty值就为true,反之为false

FileName
只读
上传的原文件名

FileSize
只读
文件大小,如果上传的原文件不存在,则FileSize为0

ContentType
只读
上传文件内容的Mime类型,如text/plain

FileContent
只读
文件的两进制内容

Files元素的方法

SaveAs filename filename是是文件路径,如果是url,需要用server.mappath()进行转化

Form元素的属性

controlName
只读
上传Form内对应的input/textarea/button/...的名称

value
只读
输入/选择的内容

使用说明

请参考Samples.zip,实例程序将上传文件到其子目录Upload下面

上传form的写作

 1<form action="Upload.asp" enctype="multipart/form-data" method="post" name="Upload">   
 2enctype="multipart/form-data" 是必须的,并且method必须是post   
 3在上传Form内必须加上<input name="CopyrightInfo" type="hidden" value="http://www.chinaasp.com"/>,   
 4否则上传组件将不能正常使用   
 5  
 6如果获得上传文件的文件个数   
 7set FileUp=server.createobject("ChinaASP.UpLoad")   
 8response.write "文件个数:"&amp;fileup.files.count   
 9  
10如果上传多个文件,如果确定对应file input上传的文件   
11如果上传form内的input的name是file1   
12set f=fileup.files("file1")   
13这样f就是你需要的文件   
14  
15如何获得文件的后缀名   
16fileext=getFileExtName(f.filename)   
17function getFileExtName(fileName)   
18dim pos   
19pos=instrrev(filename,".")   
20if pos&gt;0 then   
21getFileExtName=mid(fileName,pos+1)   
22else   
23getFileExtName=""   
24end if   
25end function   
26  
27如何将文件内容保存进数据库   
28如果你使用sql server,需要定义一个image类型的字段   
29dim conn,rs   
30set conn=server.CreateObject("adodb.connection")   
31conn.open "testfile","sa","xxx"   
32set rs=server.CreateObject("adodb.recordset")   
33rs.Open "SELECT * FROM [file] where filename is null",conn,1,3   
34rs.AddNew   
35rs("filename")=f.filename   
36rs("filesize")=f.filesize   
37rs("filecontent").AppendChunk f.filecontent //BLOB数据不能直接赋值   
38rs.Update   
39rs.Close   
40conn.Close   
41set rs=nothing   
42set conn=nothing   
43相反的要将数据从数据库里面取出来,请参考下面的程序   
44dim conn,rs   
45dim content   
46set conn=server.CreateObject("adodb.connection")   
47conn.open "testfile","sa","xxx"   
48set rs=server.CreateObject("adodb.recordset")   
49rs.Open "SELECT * FROM [file] where id =" &amp; id,conn,1,1   
50content=rs("filecontent").getChunk(clng(rs("filesize")))))   
51conn.Close   
52set rs=nothing   
53set conn=nothing   
54  
55  
56  
57  
58\---------------------------------------------------------------   
59  
60给你一个以前的代码,   
61  
62'如何打开并输出一个数据库中的文件流?   
63'按普通方式打开数据库,之后求得该文件字节大小,在网页中输出该文件MIME类型,再用binarywrite输出   
64'之前必须将以下语句放在一个页面中,而在另一个页面对之进行调用输出显示。   
65Set rs = Server.CreateObject("ADODB.recordset")   
66sql="select * from b_hn_sgbb_rtu where sgbh='02713700001' and xh='2'"   
67rs.open sql,cn,1,1   
68  
69'以下两句是在网页中打开WORD文档   
70'tu_size=rs("tu").ActualSize   
71'Response.ContentType = rs("types")   
72'Response.BinaryWrite rs("tu").getChunk(tu_size)   
73  
74'以下三句是将数据库中的流文件当作一个文件,可以打开也可以下载回来   
75Response.ContentType = "Application/octet-stream"   
76tu_size=rs("tu").ActualSize   
77Response.AddHeader "Content-Disposition", "attachment; filename=" &amp; rs("filename")   
78Response.BinaryWrite rs("tu").getChunk(tu_size)   
79  
80rs.close   
81  
82'常见文件的MIME类型   
83'GIF文件 "image/gif"   
84'BMP文件 "image/bmp"   
85'JPG文件 "image/jpeg"   
86'zip文件 "application/x-zip-compressed"   
87'DOC文件 "application/msword"   
88'文本文件 "text/plain"   
89'HTML文件 "text/html"   
90'一般文件 "application/octet-stream"</form>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus