본문으로 바로가기

강제 파일 다운로드 하기

category [ Web 관련 ]/asp 2018. 8. 31. 10:39

강제 파일 다운로드 하기

- 이미지, pdf등 바로열리지 않고 강제로 다운로드 하기



<% @ codepage="65001" language="VBScript" %>


<%

'//사용

'<a href="/proc/download.asp?fn=파일 경로&ofn=다운로드 될때의 변경 파일명">파일 다운로드</a>



'일부 웹에서 열리는 파일(txt, 이미지)을 강제로 다운로드 하기위함.

session.codePage = 65001

Response.CharSet = "UTF-8"


Response.Expires = -10000

Server.ScriptTimeOut = 300



' 파라미터값 처리

Dim fn : fn = Trim(Request("fn"))   '실제파일이 있는경로명+파일명    /data/xml/abc.xml

Dim ofn : ofn = Trim(Request("ofn"))  '다운로드시 변경되는 파일명     abcd.xml --> abc.xml이 abcd.xml로 파일명변경되어 다운로드 된다.'



' 확장자 추출

Dim TmpStr : TmpStr = Split(Filename, ".")

Dim Ext : Ext = ""

Dim Name



For Each Name In TmpStr

Ext = Name

Next



Ext = LCase(Ext)


ofn = Server.UrlEncode(ofn)

ofn = Replace(ofn, "+", "")

ofn = Replace(ofn, "%2E" & Ext, "." & Ext)



'Dim DirPath : DirPath = server.mappath("/") 시스템 디렉토리 경로 (E:~~~)

Dim DirPath : DirPath = server.mappath("\files") '//시스템 디렉토리 경로 (E:~~~) (가상 디렉토리 사용)

Dim nFullPath : nFullPath = ""

Dim FileInfo : FileInfo = Split(fn, "/")

Dim FileName : FileName = ""


For i = 1 To Int(UBound(FileInfo)) - 1

DirPath = DirPath &"\"& FileInfo(i)

Next


DirPath = Replace(DirPath, "\\", "\")

FileName = FileInfo(UBound(FileInfo))

nFullPath = DirPath &"\"& FileName



'Response.Write nFullPath

'Response.End


Set objFSO = server.CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(nFullPath)=true Then

'파일이 존재 한다면


'파일 크기 반환

Set objFile = objFSO.GetFile(nFullPath)

intFileSize = objFile.Size

Set objFile = Nothing


Response.ContentType = "application/octet-stream"

Response.AddHeader "Content-Disposition", "attachment; filename=" & ofn

Response.AddHeader "Content-Type", "application/pdf; charset=utf-8"

Response.AddHeader "Content-Transfer-Encoding", "binary"

Response.AddHeader "Content-Length", intFileSize

Response.AddHeader "Pragma", "no-cache"

Response.AddHeader "Expires", "0" 


' 스트림을 선언

Set objStream = Server.CreateObject("ADODB.Stream")

objStream.Open

objStream.Type = 1

objStream.LoadFromFile nFullPath '다운받을경로(파일명포함)

'strFile = objStream.Read


Do While Not objStream.EOS And Response.IsClientConnected

Response.BinaryWrite objStream.Read(1024)

Response.Flush()

Loop


objStream.Close

Set objStream = Nothing

Set objFSO = Nothing


Else 

'파일이 없을 때

Response.write "<script language='javascript'>"

Response.write "alert('해당 파일을 찾을 수 없습니다.');"

Response.write "history.back();"

Response.write "</script>"

End If 


%>