ASP实现文件直接下载的代码

时间:2022-09-27 20:33:01
  1. <%@ language=vbscript codepage=65001%>  
  2. <%  
  3. 'Filename must be input  
  4. if Request("Filename")="" then  
  5. response.write "<h1>Error:</h1>Filename is empty!<p>"  
  6. else  
  7. call downloadFile(replace(replace(Request("Filename"),"\",""),"/",""))  
  8.  
  9. Function downloadFile(strFile)  
  10. ' make sure you are on the latest MDAC version for this to work  
  11. ' get full path of specified file  
  12. strFilename = server.MapPath(strFile)  
  13.  
  14. ' clear the buffer  
  15. Response.Buffer = True  
  16. Response.Clear  
  17.  
  18. ' create stream  
  19. Set s = Server.CreateObject("ADODB.Stream")  
  20. s.Open  
  21.  
  22. ' Set as binary  
  23. s.Type = 1  
  24.  
  25. ' load in the file  
  26. on error resume next  
  27.  
  28. ' check the file exists  
  29. Set fso = Server.CreateObject("Scripting.FileSystemObject")  
  30. if not fso.FileExists(strFilename) then  
  31. Response.Write("<h1>Error:</h1>"&strFilename&" does not exists!<p>")  
  32. Response.End  
  33. end if  
  34.  
  35. ' get length of file  
  36. Set f = fso.GetFile(strFilename)  
  37. intFilelength = f.size  
  38.  
  39. s.LoadFromFile(strFilename)  
  40. if err then  
  41. Response.Write("<h1>Error: </h1>Unknown Error!<p>")  
  42. Response.End  
  43. end if  
  44. ' send the headers to the users Browse  
  45. Response.AddHeader "Content-Disposition","attachment; filename="&f.name  
  46. Response.AddHeader "Content-Length",intFilelength  
  47. Response.CharSet = "UTF-8"  
  48. Response.ContentType = "application/octet-stream"  
  49. ' output the file to the browser  
  50. Response.BinaryWrite s.Read  
  51. Response.Flush  
  52. ' tidy up  
  53. s.Close  
  54. Set s = Nothing  
  55. End Function  
  56. end if  
  57. %>