在ASP中巧用Response存取文件

response

     我在用ASP为某单位制作网页时遇到这样一个问题,单位以前的MIS系统中将一些Word文件以字节流的形式保存在数据库中,现在用户要求我用ASP将这些Word文件数据从数据库中取出并在网页中显示出来。开始我自然地想到在服务器上创建临时文件、然后在网页中增加一个指向这个临时文件的链接,但这个方法将大大增加服务器的负担不说,而且在服务上如何保证特定客户端所使用的临时文件不被其它客户端使用的文件覆盖,如何在文件传送给用户后将文件删除,这些问题在实际都难很好解决。那么有没有更好的办法呢?
  为此我仔细查看了一下ASP的参考书,发现Response对象有一个叫contenttype的属性,它定义服务器发送给客户端内容的MIME类型。MIME全称Multipurpose Internet Mail Extensions,即多功能Internet邮件扩展。我们知道,在网页编程中我们有时将超链接指向一个Word或Excel文件,当用户点击这个链接时浏览器会自动调用对应方法将这个文件打开。之所以能做到这点就是因为用户机器上安装office后会在浏览器中注册对应的MIME资源类型。比如说word文件的MIME类型是Application/msword(前者是MIME类型,后者是MIME子类),Excel文件的MIME资源类型是Application/msexcel。事实上,凡是浏览器能处理的所有资源都有对应的MIME资源类型,比如说html文件的MIME类型是Text/html,JPG文件的MIME类型是Image/JPG。在与服务器的交互中,浏览器就是根据所接受数据的MIME类型来判断要进行什么样的处理,对html、JPG等文件浏览器直接将其打开,对Word、Excel等浏览器自身不能打开的文件则调用相应方法打开。对没有标记MIME类型的文件,浏览器则根据其扩展名和文件内容猜测其类型。如果浏览器无法猜出,则将它作为application/octet-stream。要了解各种文件的MIME类型,请在win98 我的电脑->查看->文件夹选项->文件类型 中查看。

  于是我灵机一动,想到在ASP中可以先将WORD数据以字节流方式取出,接着将其conntenttype属性标记为Application/msword,再将它发送给客户机,客户机收到这个资源后,根据其MIME类型,会自动调用客户机上的Word(当然,前提是客户机上装了Word,否则会将其作为一个不能识别的资源,提示用户保存起来,而不是打开它)将它打开。经试验效果很好,方法简单且速度很快,而且在IE5中浏览器使用内嵌方式(类似于OLE方式)打开,效果更佳。以下是程序内容。

  假设表名tab_word,表中有两个字段,一个是整型,名id,用作Word数据的唯一标识,另一个Blob型,名worddata,里面存放Word数据。现在要在页面上显示id等于1的Word文件内容, ASP程序如下:

< %
' conn - 已创建的数据库连接
' rs -- 结果集
rs = conn.execute("select
worddata from tab_word where id = 1")
response.contenttype = "Application/msword"
response.writebinary(rs("worddata"))
'注意将结果集中的数据直接用writebinary发送出去,不要用变量
'接收这个数据,否则系统会报错
% >

  用类似的方法,还可以处理Excel、Bmp等许多类型的数据。此程序在以下系统中测试通过:服务器:NT + IIS + SqlServer客户端:Win98 + IE5 或 Netscape4.x

时间: 2024-11-03 11:28:43

在ASP中巧用Response存取文件的相关文章

ASP中巧用Response存取文件

response ---- 我在用ASP为某单位制作网页时遇到这样一个问题,单位以前的MIS系统中将一些Word文件以字节流的形式保存在数据库中,现在用户要求我用ASP将这些Word文件数据从数据库中取出并在网页中显示出来.开始我自然地想到在服务器上创建临时文件.然后在网页中增加一个指向这个临时文件的链接,但这个方法将大大增加服务器的负担不说,而且在服务上如何保证特定客户端所使用的临时文件不被其它客户端使用的文件覆盖,如何在文件传送给用户后将文件删除,这些问题在实际都难很好解决.那么有没有更好的

ASP中巧用Response属性(转)

response ASP中巧用Response属性 ---- 我在用ASP为某单位制作网页时遇到这样一个问题,单位以前的MIS系统中将 一些Word文件以字节流的形式保存在数据库中,现在用户要求我用ASP将这些Wor d文件数据从数据库中取出并在网页中显示出来.开始我自然地想到在服务器上创 建临时文件.然后在网页中增加一个指向这个临时文件的链接,但这个方法将大 大增加服务器的负担不说,而且在服务上如何保证特定客户端所使用的临时文件 不被其它客户端使用的文件覆盖,如何在文件传送给用户后将文件删除,

ASP中巧用Response属性

response ASP中巧用Response属性 ---- 我在用ASP为某单位制作网页时遇到这样一个问题,单位以前的MIS系统中将 一些Word文件以字节流的形式保存在数据库中,现在用户要求我用ASP将这些Wor d文件数据从数据库中取出并在网页中显示出来.开始我自然地想到在服务器上创 建临时文件.然后在网页中增加一个指向这个临时文件的链接,但这个方法将大 大增加服务器的负担不说,而且在服务上如何保证特定客户端所使用的临时文件 不被其它客户端使用的文件覆盖,如何在文件传送给用户后将文件删除,

ASP中巧用Response属性 -- contenttype

response 我在用ASP为某单位制作网页时遇到这样一个问题,单位以前的MIS系统中将一些Word文件以字节流的形式保存在数据库中,现在用户要求我用ASP将这些Word文件数据从数据库中取出并在网页中显示出来.开始我自然地想到在服务器上创建临时文件.然后在网页中增加一个指向这个临时文件的链接,但这个方法将大大增加服务器的负担不说,而且在服务上如何保证特定客户端所使用的临时文件不被其它客户端使用的文件覆盖,如何在文件传送给用户后将文件删除,这些问题在实际都难很好解决.那么有没有更好的办法呢?

ASP中如何将代码生成的文件设为只读

ASP中如何将代码生成的文件设为只读 (01-2-25 137) [hooke] 于 2001-2-21 17:12:14 加贴在 Joy ASP ↑: Attributes Property Sets or returns the attributes of files or folders. Read/write or read-only, depending on the attribute. object.Attributes [= newattributes] Arguments ob

ASP中巧用存储过程

在许多网页上,用户都可以通过简单地选择列表中的一项来输入一个国家或州的名字,在大多数情况下,我们通常使用ASP来生成这个列表,创建生成这个列表的函数并把它们保存在一个Include文件中.然而,ASP需要额外的时间在服务器上加载并处理这些Include文件,此外,每次生成一个选择列表时,服务器都必须加载整个Include文件. 在最近为一个客户建立网站时,我有了一个新的想法,把这些函数放在存储过程而不是Include文件中,让存储过程来生成选择清单.下面的代码将生成一个选择清单的记录. 首先,使

ASP中FSO的神奇功能 - 文件读取

fso 作 者 : 甘冀平 现在已经有了一些用户信息保存在文件中,就像一个简单的数据库.假设有一个用户想了解所有的访问者,就要从登记的信息中分离出相关部分,因为没有象数据库一样拥有结构化的列. 我们知道,在所创建的文件中,第1行是用户名,第2行是他们的主页,第3行是他们的电子邮件地址.随后登记的用户也是按照这样的结构存储他们的信息,所以每3行将包含一个用户的登记信息.知道了这些,就可以编写下面的代码来显示信息: < %' create the fso objectset fso = Server

ASP中FSO加递归生成文件列表(xml)

本来生成这个xml文档是为了开发一个ftp的搜索,后来由于没有资料参考怎么搜索xml文档,也就放弃了.其中最重要的是递归的算法.生成文件列表的速度很快.这个程序可以用于生成播放列表之类的东东.需要IIS的FSO组件支持.生成类似下面的XML文档 <?xml version="1.0" encoding="gb2312"?> <ftp ip="10.1.228.228"> <DIR path="Game&qu

帮下忙啊,ajax中没法用response下载文件啊

问题描述 在用ajax的页面中添加个下载图片的按钮,在自己没有ajax项目就能用,在公司的项目上就不能用,症状是点了按钮后没反应,页面下面提示系统错误-1072896748BAIDU了一下好像说是ajax和respongse有冲突?忘各位大虾帮帮忙啊System.IO.FileStreamfs=System.IO.File.OpenRead(path);//path是图片地址byte[]FileData=newbyte[fs.Length];fs.Read(FileData,0,(int)fs.