Spring

[Spring] 파일 다운로드 구현

hellooooo 2021. 12. 15. 15:40
728x90

 

 

[AJAX] 다중 fileupload / formData 이용하여 JSON 파라미터 넘기기

 html  js file은 JSON에 포함될 수 없다. 그래서 FormData 안에 file과 JSON (= data)를 append 시킨다. //FormData 새로운 객체 생성 var formData = new FormData(); // 넘길 데이터를 담아준다. var data =..

truecode-95.tistory.com

업로드 이후로 다운로드 기능을 정리해보았다. 

 xml 

<select id="selectFileList" resultType="CommonFileVO" parameterType="CommonFileVO">
      SELECT  file_no,
              board_no,
              original_file_name,
              stored_file_name,
              file_size,
              create_date,
              create_user,
              del_y_n 
      FROM   commonfiles
      WHERE  board_no =  #{boardNo}
</select>

 mapper 

List<CommonFileVO> selectFileList(String boardNo);

 service 

public List<CommonFileVO> selectFileList(String boardNo) {
   return boardMapper.selectFileList(boardNo);
}

 jsp 

 <c:forEach items="${infofileList}" var="map">
   <a href="${pageContext.request.contextPath}/main/board/fileDown.do?storedFileName=${map.storedFileName}&originalFileName=${map.originalFileName}">${map.originalFileName}</a>
 </c:forEach>

 controller 

@RequestMapping(value="/fileDown.do") //글 리스트 페이지
public void fileDown(@RequestParam("originalFileName")String originalFileName, @RequestParam("storedFileName")String storedFileName, HttpServletRequest request, HttpServletResponse response) throws Exception {
  CommonFileVO fileVO = new CommonFileVO();
  fileVO.setOriginalFileName(originalFileName);
  fileVO.setStoredFileName(storedFileName);
  fileutils.fileDownload(fileVO, request, response);
}

 fileUtils 

//파일 다운로드
public static void fileDownload (CommonFileVO fileVO, HttpServletRequest request, HttpServletResponse response) throws Exception {

  // globals.properties
  File file = new File(EgovProperties.getProperty("Globals.filePath"), fileVO.getStoredFileName());
  BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));

  //User-Agent : 어떤 운영체제로  어떤 브라우저를 서버( 홈페이지 )에 접근하는지 확인함
  String header = request.getHeader("User-Agent");
  String fileName;

  if ((header.contains("MSIE")) || (header.contains("Trident")) || (header.contains("Edge"))) {
    //인터넷 익스플로러 10이하 버전, 11버전, 엣지에서 인코딩 
    fileName = URLEncoder.encode(fileVO.getOriginalFileName(), "UTF-8");
  } else {
    //나머지 브라우저에서 인코딩
    fileName = new String(fileVO.getOriginalFileName().getBytes("UTF-8"), "iso-8859-1");
  }
  //형식을 모르는 파일첨부용 contentType
  response.setContentType("application/octet-stream");
  //다운로드와 다운로드될 파일이름
  response.setHeader("Content-Disposition", "attachment; filename=\""+ fileName + "\"");
  //파일복사
  FileCopyUtils.copy(in, response.getOutputStream());
  in.close();
  response.getOutputStream().flush();
  response.getOutputStream().close();
}

 globals.properties 

# 파일 업로드 경로(경로 설정은 반드시 절대경로를 사용해야함, 경로 뒤에 /를 붙여 주어야함.)
Globals.filePath =  C:/file/upload/