Danny's 유용한 ASP 팁s

   강좌 최초 작성일 : 2003년 06월 11일
   강좌 최종 수정일 : 2003년 06월 18일

   강좌 읽음 수 : 38616 회

   작성자 : Danny(전 성대)
   편집자 : Taeyo(김 태영)

   강좌 제목 : 첨부파일을 무조건 다운로드 되게 하기 

강좌 전 태오의 잡담>

이 강좌는 Danny(전성대) 님께서 제공하는 유용한 팁들의 퍼레이드 랍니다. ^^

 


이번 강좌는 첨부파일을 무조건 다운로드 되도록 하게하는 방법에 대한 이야기입니다.

 

사담입니다만... 모두 퇴근한 후에 사무실에 있으려니 조금 무섭군요. 핫핫

 

회사에서 가끔 기획이사님 혹은 개발팀장님께서 하시는 말씀이

 

"이거이거이거~ Execel 파일 첨부한거 꼭 다른이름으로 저장해야만 되나?"
"익스플로어에서 열리면 느리고 짜증이 나니.. 험~"

 

저는 자주 들었습니다.

 

보통 a href 태그를 이용하거나 reaponse.Redirect 로 파일이름에 직접 연결을 하게 되면 오피스가 사용자 컴퓨터에 설치 되어있을경우 익스플로어에서 DOC나 Excel 파일이 열려버리게 되죠.

 

상당히 귀찮을 경우가 있거나 또는 무조건 다운로드만을 해야할 경우가 있지요. 예를 든다면, 웹메일 만들때 eml 원본소스 다운받기 등을 구현 할때 말이죠.

 

eml 은 익스플로어에서 mhtml 로 익스플로어에서 열려버리지요. 이럴 때는 헤더 추가와 Stream 을 통해서 무조건 다운로드를 할수 있도록 할수 있습니다.

 

download.asp    '파일을 하나 만들어보겠습니다.

<%
    file = Request.Form ("file")
    '파일 이름

    Response.ContentType = "application/unknown"
    'ContentType 를 선언합니다.

    Response.AddHeader "Content-Disposition","attachment; filename=" & file
    '헤더값이 첨부파일을 선언합니다.

    Set objStream = Server.CreateObject("ADODB.Stream")
    'Stream 을 이용합니다.

    objStream.Open
    '무엇이든 Set 으로 정의했으면 열어야 겠지요^^

    objStream.Type = 1

    objStream.LoadFromFile Server.MapPath("./data/")&"\"& file
    '절대경로 입니다.

    download = objStream.Read
    Response.BinaryWrite download
    '이게 보통 Response.Redirect 로 파일로 연결시켜주는 부분을 대신하여 사용된 것입니다.

    Set objstream = nothing
    '초기화시키구요.

%>

위의 소스에는 크게 어려움이 없을거라고 생각됩니다.

 

보통 자료실에서 파일을 다운받으시게 되면 다운 횟수도 계산하고 그러지요. 횟수 계산하는 처리도 하고 필요한 사용자 IP도 저장하고.... 다운한 시간도 저장하고.. 이런 치장을 하는것은 사용자의 몫이라 생각됩니다.

 

위의 내용은 한메일에서 eml 원본소스 다운받기를 클릭하면 익스플로어에서 열리는게 아니라 다운로드 되어지는 로직과 같은 방법입니다.

 

제가 어떻게 아냐구요? 믿거나 말거나에요~

 

- 이하의 부분은 위 강좌와 관련한 추가정보입니다 -

1. 참고로, 위의 방법은 로컬 서버의 해당 파일 스트림을 ASP 메모리로 올리게 되므로, 서버의 성능을 조금은 떨어뜨릴 수 있다는 단점이 있답니다. ^^ 참고하세요...

2. 위의 방법은 익스플로러의 버전에 따라, 오류가 발생할 수도 있습니다. 사용자가 사용하는 브라우저의 버전이 IE 5 이하라면 더더욱 문제가 심각합니다. 고로, 이 방법은 모든 사용자의 브라우저가 최신이라는 것을 장담할 수 있을 경우에만 사용하는 것이 좋습니다. 다음은 이와 관련된  MSDN의 링크입니다.

 

http://support.microsoft.com/default.aspx?scid=kb;EN-US;182315
http://support.microsoft.com/default.aspx?scid=kb;KO;262042
http://support.microsoft.com/default.aspx?scid=kb;KO;266305
http://support.microsoft.com/default.aspx?scid=kb;KO;267991
http://support.microsoft.com/default.aspx?scid=kb;ko;279667


좋은 정보를 제공해주신, 송원석(!)님께 대단히 감사드립니다.

2008/02/21 15:51 2008/02/21 15:51

Trackback Address :: https://youngsam.net/trackback/173