程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> asp中自定義文件下載

asp中自定義文件下載

編輯:ASP技巧

可以用流下載(耗內存,少用)或直接轉到該文件.


<%

Const USE_STREAM = 0 '0.不用流(Adodb.Stream)下載 1.用流下載
Const ALLOW_FILE_EXT = "rar,zip,chm,doc,xls,swf,mp3,gif,jpg,jpeg,png,bmp" '允許下載的文件的擴展名,防止源代碼被下載

Dim sDownFilePath '下載文件路徑
sDownFilePath = Trim(Request("FilePath"))
'或者根據傳過來的文件ID從數據庫中獲取文件路徑

'如果 sDownFilePath 為絕對路徑,一定要將 sDownFilePath 轉換為相對 本文件的相對路徑

'sDownFilePath = "focus.swf"

Call DownloadFile(sDownFilePath)

Function DownloadFile(s_DownFilePath)
    '判斷有沒傳遞文件名
    If IsNull(s_DownFilePath) = True Or Trim(s_DownFilePath) = "" Then
        OutputErr "錯誤:先確定要下載的文件,下載失敗"
    End If

    '判斷擴展名是否合法
    Dim s_FileExt
    s_FileExt = Mid(s_DownFilePath, InstrRev(s_DownFilePath, ".")+1)
    If InStr("," & ALLOW_FILE_EXT & ",", "," & s_FileExt & ",") <= 0 Then
        OutputErr "錯誤:文件類型(" & s_FileExt & ")不允許被下載,下載失敗"
    End If
   
    s_DownFilePath = Replace(s_DownFilePath, "\", "/")

    '為了安全,某些目錄禁止下載文件,在這裡處理
    '
   
    '檢測服務器是否支持fso
    Dim o_Fso
    On Error Resume Next
    Set o_Fso = Server.CreateObject("Scripting.FileSystemObject")
    If Err.Number <> 0 Then
        Err.Clear
        OutputErr "錯誤:服務器不支持fso組件,下載失敗"
    End If

    '取得文件名,文件大小
    Dim s_FileMapPath
    Dim o_File, s_FileName, n_FileLength
    s_FileMapPath = Server.MapPath(s_DownFilePath)
    If (o_Fso.FileExists(s_FileMapPath)) = True Then
        Set o_File = o_Fso.GetFile(s_FileMapPath)
        s_FileName = o_File.Name
        n_FileLength = o_File.Size
        o_File.Close
    Else
        OutputErr "錯誤:文件不存在,下載失敗"
    End If
    Set o_Fso = Nothing

    '判斷是否下載的文件大小超過限制
    '   
   
    '如果不是用流下載,直接轉到該文件
    If USE_STREAM = 0 Then
        Response.Redirect sDownFilePath
        Response.end
    End If

    '檢測服務器是否支持Adodb.Stream
    On Error Resume Next
    Set o_Stream = Server.CreateObject("Adodb.Stream")
    If Err.Number <> 0 Then
        Err.Clear
        OutputErr "錯誤:服務器不支持Adodb.Stream組件,下載失敗"
    End If

    o_Stream.Tyep = 1
    o_Stream.Open
    o_Stream.LoadFromFile s_FileMapPath

    Response.Buffer = True
    Response.Clear
    Response.AddHeader "Content-Disposition", "attachment; filename=" & s_FileName
    Response.AddHeader "Content-Length", n_FileLength
    Response.CharSet = "UTF-8"
    Response.ContentType = "application/octet-stream"
    Response.BinaryWrite o_Stream.Read
    Response.Flush

    o_Stream.Close
    Set o_Stream = Nothing

End Function

Sub OutputErr(s_ErrMsg)
    Response.Write "<font color=red>" & s_ErrMsg & "</font>"
    Response.End
End Sub

%>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved