发新话题
打印

请问asp中如何下载文件?

请问asp中如何下载文件?

我的代码:  
<%  
Const  ForReading=1  
Const  TristateTrue=-1  
Const  FILE_TRANSFER_SIZE=16384  

Function  downloadFile(Path,MimeType,Filename)  

       Dim  TempFilePath  

       sent  =  0  

       downloadFile  =  True  

       set  objFileSystem  =  Server.CreateObject("Scripting.FileSystemObject")  
       set  objFile  =  objFileSystem.GetFile(Path)  
       set  objStream  =  objFile.OpenAsTextStream(ForReading,TristateTrue)  

       Response.AddHeader  "Content-Disposition","attachment;filename="  &  Filename  
       Response.AddHeader  "content-length",objFile.Size  
         
       Response.CharSet  =  "UTF-8"      
       Response.ContentType  =  "application/octet-stream"  

       Do  While  not  objStream.AtEndOfStream  
               char  =  objStream.Read(1)  
               Response.BinaryWrite(char)  
               sent  =  sent  +1  
               if(sent  MOD  FILE_TRANSFER_SIZE)  =  0  Then  
                       Response.Flush  
                       if  Not  Response.IsClientConnected  Then  
                               downloadFile  =  False  
                               Exit  Do  
                       End  if  
               End  if  
       Loop  

       Response.Flush  

       if  Not  Response.IsClientConnected  Then  TransferFile  =  False  
         
       objFile.Close  
       set  objFile  =  Nothing  
                 
       objStream.Close  

       set  objStream  =  Nothing  
       set  objFileSystem  =  Nothing  
End  Function  

on  error  resume  next  

strPath  =  "E:\test.xls"  
MimeType  =  "application/octet-stream"  
strFileName  =  "test.xls"  
sucess  =  downloadFile(strPath,MimeType,strFileName)  

Response.End  
%>  
可是下载完了是乱码,不知道怎么回事?希望大家帮帮忙!  
还有一点很奇怪,我有a.asp和b.asp,a中生成excel,b下载,正常。但是当我把b的代码拷到a中时下载完了就是乱码了。

TOP

给你看看我收藏的一段下载代码:  

将下面的东西存成download.asp  
然后你就可以用a  herf="http://xxx.xxx.com/download.asp?n=file.doc">download!</a>  
来下载了!

TOP

<%  
Response.Buffer  =  true  
Response.Clear  

           dim  url  
           Dim  fso,fl,flsize  
           dim  Dname  
           Dim  objStream,ContentType,flName,isre,url1  
'*********************************************调用时传入的下载文件名  
           Dname=trim(request("n"))  
'******************************************************************  
           If  Dname<>""  Then  
'******************************下载文件存放的服务端目录  
                       url=server.MapPath("/")&"\"&Dname  
'***************************************************  
           End  If  

           Set  fso=Server.CreateObject("Scripting.FileSystemObject")  
                       Set  fl=fso.getfile(url)  
                       flsize=fl.size  
                       flName=fl.name  
                       Set  fl=Nothing  
                       Set  fso=Nothing  
           %>  
           <%  
                       Set  objStream  =  Server.CreateObject("ADODB.Stream")  
                       objStream.Open  
                       objStream.Type  =  1  
                       objStream.LoadFromFile  url  


                                   Select  Case  lcase(Right(flName,  4))  
                                               Case  ".asf"  
                                                           ContentType  =  "video/x-ms-asf"  
                                               Case  ".avi"  
                                                           ContentType  =  "video/avi"  
                                               Case  ".doc"  
                                                           ContentType  =  "application/msword"  
                                               Case  ".zip"  
                                                           ContentType  =  "application/zip"  
                                               Case  ".xls"  
                                                           ContentType  =  "application/vnd.ms-excel"  
                                               Case  ".gif"  
                                                           ContentType  =  "image/gif"  
                                               Case  ".jpg",  "jpeg"  
                                                           ContentType  =  "image/jpeg"  
                                               Case  ".wav"  
                                                           ContentType  =  "audio/wav"  
                                               Case  ".mp3"  
                                                           ContentType  =  "audio/mpeg3"  
                                               Case  ".mpg",  "mpeg"  
                                                           ContentType  =  "video/mpeg"  
                                               Case  ".rtf"  
                                                           ContentType  =  "application/rtf"  
                                               Case  ".htm",  "html"  
                                                           ContentType  =  "text/html"  
                                               Case  ".txt"  
                                                           ContentType  =  "text/plain"  
                                               Case  Else  
                                                           ContentType  =  "application/octet-stream"  
                                   End  Select  



                                   Response.AddHeader  "Content-Disposition",  "attachment;  filename="  &  flName  
                                   Response.AddHeader  "Content-Length",  flsize  

                                   Response.Charset  =  "UTF-8"  
                                   Response.ContentType  =  ContentType  

                                   Response.BinaryWrite  objStream.Read  
                                   Response.Flush  
                                   response.Clear()  
                       objStream.Close  
                       Set  objStream  =  Nothing  

%>

TOP

发新话题