免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 961 | 回复: 0
打印 上一主题 下一主题

让txt,doc,pdf...都被下载吧 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-12 14:48 |只看该作者 |倒序浏览
这方面的文章真少,让偶找了老长时间。
据为己有
直接让客户端浏览器下载已知类型的文件   ----   作者:孟子E章   
      
  
Web开发人员都有过这样的疑问,如何让一个文件,尤其是一个已知类型的文件,发送到客户端,直接提示让浏览者下载,而不是用与它相关联的程序打开。以前
我们最常用的办法就是把这样的文件加到链接上,这样可以让浏览者通过点击鼠标右键的目标另存为来下载所链接的文件。但是,这样有两个不足的地方:   

一是:如果浏览器能够识别已下载文件的扩展名,则浏览器就会激活该扩展名所关联的程序来打开所下载的文件。比如:在Windows平台上,如果用户点击的
链接链接的是一个“.doc”文件的话,那么,浏览器就会启动Microsoft   Word应用程序来打开它。   
           二是:如果采用链接的办法的话,任何能看到该链接的人都可以下载该文件,你虽然也可以对所下载的文件进行权限设置,但那样做也不是很方便的。有时候我们需要更为灵活和富有弹性的方式,下面的程序能够很方便地克服以上两方面的不足。   

这种办法是可靠的,但你必须记住:没有授权的用户不能够通过在浏览器地址栏里输入文件的URL来取得该文件的下载权。所以,要下载的文件应该放到虚拟目录
之外的一个目录里,比如:如果你的虚拟目录是C:\Mengxianhui\Tomcat4\Website\MyApp的话,那么,存放在该目录和该目
录下的任何子目录下所有文件对因特网上的任何用户都是可见的。要直接下载一个文件,我们需要做两件事,第一件事是:设定响应的内容类为
“application/octet-stream”,大小写无关。第二件事是:设置HTTP的响应头名字为:Content-
Disposition,设定值为:attachment;   filename   =  
theFileName。这里的theFileName就是出现在文件下载对话框里的默认文件名,通常和所下载的文件名字相同,但也可以不同。下面,我们
就平常最常用的JSP和ASP页面来举一个实际应用的例子。   
             
              TestFileDownload.JSP页面的例子:   
                
                
             

值得注意的是:在你要下载的文件内容里,除了文件的内容之外,不应该再附加有其它任何的字符,包括空格和回车换行符。我们有时在编写代码的时候,为了使代
码清晰可读,往往会添加一些空格、制表符或者回车换行符,这样虽然看起来比较清晰,但有时可能会得不到正确的结果。比如:   
                   
           应该写成这样:   
             
             
           TestFileDownload.ASP页面的例子:   
             

在ASP里,没有提供从文件读取文件流信息的方法,因此,为了得到文件的流信息,我们必须借助其他的工具,最简单的就是编写一个VB或C的DLL组件,让
组件返回文件的流信息。下面是一个用VB编写的DLL的例子,工程名字为MengXHFileDownLoad,类模块的名字为
BinReadFromFile,类方法readBinFromFile如下:   
                     
           Function   readBinFromFile(ByVal   bfilename   As   String)   As   Variant   
                       Dim   fl   As   Long   
                       Dim   FileNum   As   Long   
                       Dim   binbyte()   As   Byte   
                       Dim   binfilestr   As   String   
                         
                       On   Error   GoTo   errHandler                      
                       FileNum   =   FreeFile                      
                       Open   bfilename   For   Binary   As   #FileNum                      
                       fl   =   FileLen(bfilename)   
                       ReDim   binbyte(fl)                      
                       Get   #FileNum,   ,   binbyte                      
                       Close   #FileNum                      
                       readBinFromFile   =   binbyte   
                       Exit   Function   
                                             
           errHandler:   
                       Exit   Function   
           End   Function   
             
           把上面的代码编译成MengXHFileDownLoad.DLL,然后注册即可使用。下面以直接下载一个When   A   Man   Loves   A   Woman.mp3的MP3文件为例子,我们要编写的ASP脚本代码如下:   
             
                     
                     
             
           当我们运行上面的TestFileDownload.ASP文件时,浏览器会弹出一个文件下载的对话框,提示我们下载,而不是用默认的MP3播放器打开。   
           这种方法也可以把我们的ASP页面生成的HTML源代码保存成一个文件,下面的代码会提示你把ASP执行的结果保存成Test.htm文件。具体的方法是:   
                   测试"   
                           Response.write   ""   
                           Response.write   "【孟宪会之精彩世界】"   
                           Response.End   
                   %>   
             
           当我们的文件数目很少时,也可以直接在服务器端进行设置,让这些文件直接下载。具体做法是:在Internet服务管理器里,选“属性”项,然后选“HTTP   Headers”标签页进行设置即可!!
然后是PHP的,一份自己写的,一份抄来的
抄的,加入了大小的控制,8错
("Content-type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Accept-Length:".filesize($file_path));
header("Content-Disposition:attachment;filename=".$file_name);
$fp=fopen($file_path,"r");
echo fread($fp,filesize($file_path));
fclose($fp);
?>
自己的
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8036/showart_276436.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP