[SPRING,JAVA] 맥 사파리 브라우저에서 첨부파일 한글 깨짐 현상

2024. 4. 2. 09:55오류노트/웹

기록용 

프로젝트 진행 중 한글파일 깨짐 현상 발생

 

request.getHeader("User-Agent") 

로 브라우저 정보를 가져올 시 

Chrome 일 경우 크롬과 사파리 정보가 둘다 나와서

indexOf로 하니까 정보가 이상하게 출력되어 

브라우저 정보를 가져오는 함수와

 

content-disposition 을 설정하는 함수 두개를 생성

 

/** 브라우저 정보 획득 **/
public static getBrowser(HttpServletRequest request) {
  String header = request.getHeader("User-Agent").toUpperCase();
  
  if(header.indexOf("MSIE") > -1) return "MSIE";
  else if(header.indexOf("TRIDENT") >-1) return "MSIE";
  else if(header.indexOf("CHROME") > -1) return "CHROME";
  else if(header.indexOf("SAFARI") > -1) return "SAFARI";
  else if(header.indexOf("OPERA") > -1) return "OPERA";
  return "FIREFOX";

}

 

/** Content Disposition  설정 **/

public static void setContentDisposition(String fileName, HttpServletRequest reuqest, HttpServletResponse response) throw Exception {
  String browser = getBrowser(request); //브라우저 정보 획득
  String dispositionPrefix = "attachment; filename="; //prefix 
  String encNm = "";
  
  
  if(browser.equals("MSIE")) {
    encNm = URLEncoder.encode(fileName,"UTF-8").replaceAll("\\+","%20");
  } else if(browser.equals("FIREFOX")) {
    encNm = "\"" + new String(fileName.getBytes("UTF-8","8859_1") + "\"";
  } else if(browser.equals("OPERA")) {
    encNm = "\"" + new String(fileName.getBytes("UTF-8","8859_1") + "\"";
  } else if(browser.equals("SAFARI")) {
    encNm = URLEncoder.encode(fileName,"UTF-8");
    encNm = encNm.replaceAll("[+]","%20");
  } else if (browser.equals("CHROME")) {
    encNm = java.net.URLEncoder.encode(fileName,"UTF-8");
    encNm =  encNm.replaceAll("\\+","%20");
  }
  
  if("SAFARI".equals(browser)) dispositionPrefix="attachment; filename*=UTF-8''"; //SAFARI일경우 PREFIX 변경
  reponse.setHeader("Content-Disposition", dispositionPrefix+encNm);
  if("OPERA".equals(browser)) reponse.setContentType("application/octet-stream;charset=UTF-8");
  
  
  


}

 

 

반응형