티스토리 뷰

euc-kr 에서 utf-8로 사이트를 리뉴얼 하면서 기존에 업로드 되어있던

 

한글파일들이 문제가 되기 시작했다..

 

'다운로드가 안되요. 페이지가 안떠요. 다운은 되는데 파일이 안열려요. 압축파일 헤더가 깨졌다고 해요.'

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

테스트 진행한 버전 IE8/9 , 크롬 , 파이어폭스

 

<%@LANGUAGE="vbscript" CodePage="65001" %>
<% session.CodePage = "65001" %>

<% Response.CharSet = "utf-8" %>

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

한글이 안깨지게 설정해주고..


<%

 l_file = Trim(Request("file"))
 l_folder = Trim(Request("folder"))

폴더명과 파일명을 받은후

 

target = "파일경로~~"
 Set Fso = Server.CreateObject("Scripting.FileSystemObject")

 

 If Fso.FileExists(target) Then

파일이 있을때
 userAgent = Request.ServerVariables("HTTP_USER_AGENT")

브라우저 체크
  If InStr(userAgent, "MSIE") > 0 Then
   'IE 5.0인 경우.
   If InStr(userAgent, "MSIE 5.0") > 0 Then
    contentDisp = "inline;filename="
    contentType = "application/x-msdownload"
   'IE 5.0이 아닌 경우.
   Else
    contentDisp = "attachment;filename="
    contentType = "application/octet-stream"

여기서 아래에 있는 mimetype함수를 이용해서  contentType  변경가능
   End If
  'Netscape등 기타 브라우저인 경우.
  Else

   contentDisp = "attachment;filename="
   contentType = "application/unknown"
   l_file = Replace(l_file,",","")

그롬에서 중복헤더 오류 처리용
  End If

  l_file = replace(l_file,"&","&")

마찬가지 오류 처리용
  Response.Clear
  Response.AddHeader "Content-Transfer-Encoding", "binary"
  Response.AddHeader "Pragma", "no-cache"
  Response.AddHeader "Expires", "0"

   이부분은 다운로드 후에 한글이나 엑셀 문서 파일종류가 파일형식이맞지않아서

  열리지 않는 문제를 잡아줌..
  If InStr(userAgent, "MSIE") = 0 Then
  Response.AddHeader "Content-Disposition", contentDisp & l_file
  Else
  Response.AddHeader "Content-Disposition",
        contentDisp & server.UrlPathEncode(l_file)
  Set objFile = Fso.GetFile(target)
   Response.AddHeader "Content-Length", objFile.Size
  Set objFile = Nothing  
  End If

이부분은 정확하진 않지만 크롬에서 중복헤더 오류가 발생하는문제와
 urlpathencode로 파일명을 다시 변경해주면 !@$#@$$!#!@# 로
 보이는 문제가 생겨서 따로 처리

  Set objStream = Server.CreateObject("ADODB.Stream")
  objStream.Open
  objStream.Type = 1
  objStream.LoadFromFile target
  Response.BinaryWrite objStream.Read
  Set objstream = Nothing

파일 다운로드~~
 Else 
  showMsgBox " 해당 파일이 존재하지 않습니다.","history.back();"

없으면 리턴
 End If
 Set Fso = Nothing

 End Function


 Sub ShowMsgBox(ByVal strMsg , ByVal strGoUrl)
 Response.Write "<script language='JavaScript'>" & vbCRLF

 If strMsg <> "" Then Response.Write " alert(""" & strMsg & """);" & vbCRLF
 If strGoUrl <> "" Then Response.Write " " & strGoUrl & vbCRLF

 Response.Write "</script>" & vbCRLF
 Response.End
 End Sub


 Function GetMIMEType(Extension)
  dim Ext
  Ext = UCase(Extension)
  select case Ext  'Common documents
   case "TXT", "TEXT", "JS", "VBS", "ASP", "CGI", "PL", "NFO", "ME", "DTD"
    sMIME = "text/plain"
   case "HTM", "HTML", "HTA", "HTX", "MHT"
    sMIME = "text/html"
   case "CSV"
    sMIME = "text/comma-separated-values"
   case "JS"
    sMIME = "text/javascript"
   case "CSS"
    sMIME = "text/css"
   case "PDF"
    sMIME = "application/pdf"
   case "RTF"
    sMIME = "application/rtf"
   case "XML", "XSL", "XSLT"
    sMIME = "text/xml"
   case "WPD"
    sMIME = "application/wordperfect"
   case "WRI"
    sMIME = "application/mswrite"
   case "XLS", "XLS3", "XLS4", "XLS5", "XLW", "XLSM"
    sMIME = "application/msexcel"
   case "DOC"
    sMIME = "application/msword"
   case "PPT","PPS"
    sMIME = "application/mspowerpoint"
   'WAP/WML files
   case "WML"
    sMIME = "text/vnd.wap.wml"
   case "WMLS"
    sMIME = "text/vnd.wap.wmlscript"
   case "WBMP"
    sMIME = "image/vnd.wap.wbmp"
   case "WMLC"
    sMIME = "application/vnd.wap.wmlc"
   case "WMLSC"
    sMIME = "application/vnd.wap.wmlscriptc"
   'Images
   case "GIF"
    sMIME = "image/gif"
   case "JPG", "JPE", "JPEG"
    sMIME = "image/jpeg"
   case "PNG"
    sMIME = "image/png"
   case "BMP"
    sMIME = "image/bmp"
   case "TIF","TIFF"
    sMIME = "image/tiff"
   case "AI","EPS","PS"
    sMIME = "application/postscript"
   'Sound files
   case "AU","SND"
    sMIME = "audio/basic"
   case "WAV"
    sMIME = "audio/wav"
   case "RA","RM","RAM"
    sMIME = "audio/x-pn-realaudio"
   case "MID","MIDI"
    sMIME = "audio/x-midi"
   case "MP3"
    sMIME = "audio/mp3"
   case "M3U"
    sMIME = "audio/m3u"
   'Video/Multimedia files
   case "ASF"
    sMIME = "video/x-ms-asf"
   case "AVI"
    sMIME = "video/avi"
   case "MPG","MPEG"
    sMIME = "video/mpeg"
   case "QT","MOV","QTVR"
    sMIME = "video/quicktime"
   case "SWA"
    sMIME = "application/x-director"
   case "SWF"
    sMIME = "application/x-shockwave-flash"
   'Compressed/archives
   case "ZIP"
    sMIME = "application/x-zip-compressed"
   case "GZ"
    sMIME = "application/x-gzip"
   case "RAR"
    sMIME = "application/x-rar-compressed"
   'Miscellaneous
   case "COM","EXE","DLL","OCX"
    sMIME = "application/octet-stream"
   'Unknown (send as binary stream)
   case else
    sMIME = "application/octet-stream"
  end select
  GetMimeType = sMIME
%>
댓글