web developer๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป

[Spring] ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๊ตฌํ˜„ ๋ณธ๋ฌธ

Spring

[Spring] ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๊ตฌํ˜„

natrue 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/