간펴니
간편 자바프로그래밍
간펴니
전체 방문자
오늘
어제
  • 전체보기 (185)
    • 알고리즘 (2)
    • JAVA (69)
      • 이펙티브 자바 (47)
      • JAVA 병렬프로그래밍 (5)
      • 자바 (17)
    • SPRING (60)
      • Spring (12)
      • IceWater Community (37)
      • Homme Shop (10)
      • 토비의 스프링 (1)
    • SPRING BOOT (4)
      • WhiteRecord (7)
    • 오류 (9)
    • DB (10)
      • ORACLE (5)
      • MYSQL (1)
      • MYBATIS (4)
      • JPA (0)
      • 대용량 데이터 베이스 (0)
      • SQL (0)
    • FRONT (8)
      • JSP (2)
      • JavaScript (2)
      • Jquery (3)
      • Thymeleaf (1)
    • AWS (6)
    • JNI (10)
    • 회고 (0)
    • MQ (0)
    • Radis (0)
    • Git (0)
    • Docker (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 컨셉 변경

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
간펴니

간편 자바프로그래밍

SPRING/IceWater Community

[스프링]게시판 첨부파일 다운로드 (3)

2021. 8. 30. 11:41
728x90

mapper 작성

<select id="selectFileInfo" parameterType="hashMap" resultType="hashMap">
	SELECT 
		STORED_FILE_NAME,
		ORG_FILE_NAME
	FROM MP_FILE
	WHERE FILE_NO = #{FILE_NO}
</select>

파일번호를 기준으로 파일테이블의 파일이름을 검색합니다.

 


 

function fn_fileDown(fileNo){
			var formObj = $("form[name='readForm']");
			$("#FILE_NO").attr("value", fileNo);
			formObj.attr("action", "/board/fileDown");
			formObj.submit();
		}

다운로드를 요청하는 게시글 상세페이지 뷰의 script 태그 사이에 해당 함수를 넣어준다.

전 포스팅에서 만들어놓은 onclick 함수와 input hidden태그를 사용해서,

다운로드를 실행하면 readForm(상세페이지 폼)의 fileNo를 (value라는 이름의 key , {파일번호}) 라는 Map<Stirng,Object> 의 형태의 파라미터를 컨트롤러로 보냄

 


 

DAO 작성

BoardDAO

	public Map<String, Object> selectFileInfo(Map<String, Object> map) throws Exception;
    

BoardDAOImpl

	@Override
	public Map<String, Object> selectFileInfo(Map<String, Object> map) throws Exception {
		// TODO Auto-generated method stub
		return sqlSession.selectOne("boardMapper.selectFileInfo", map);
	}

뷰에서 받은 map값을 파라미터로 선언하고 , 매개변수로 mapper에 넣어준다.

 


 

BoardService

	public Map<String, Object> selectFileInfo(Map<String, Object> map) throws Exception;
    
    
BoardServiceImpl
	
	@Override
	public Map<String, Object> selectFileInfo(Map<String, Object> map) throws Exception {
	
		return dao.selectFileInfo(map);
	}

서비스부분

 


컨트롤러 부분이다.

@RequestMapping(value="/fileDown")
	public void fileDown(@RequestParam Map<String, Object> map, HttpServletResponse response) throws Exception{
		Map<String, Object> resultMap = service.selectFileInfo(map);
		String storedFileName = (String) resultMap.get("STORED_FILE_NAME");
		String originalFileName = (String) resultMap.get("ORG_FILE_NAME");
		
		// 파일을 저장했던 위치에서 첨부파일을 읽어 byte[]형식으로 변환한다.
		byte fileByte[] = org.apache.commons.io.FileUtils.readFileToByteArray(new File("C:\\mp\\file\\"+storedFileName));
		
		response.setContentType("application/octet-stream");
		response.setContentLength(fileByte.length);
		response.setHeader("Content-Disposition",  "attachment; fileName=\""+URLEncoder.encode(originalFileName, "UTF-8")+"\";");
		response.getOutputStream().write(fileByte);
		response.getOutputStream().flush();
		response.getOutputStream().close();
		
	}

map값을 파라미터로 받아오고, mapper의 selectFileInfo에서 FileNo(파일PR) 저장된이름과 원본파일이름을 get으로 가져온다.

 

파일을 저장했던 위치(저장위치+저장이름) 에서 파일을 읽어서 byte[]형식으로 변환하고

 

contentType과 응답코드,응답 메시지등을 담아서 전송하는 HttpServletResponse를 이용해서 값을 넘긴다.

URLEncoder는 여러가지 문자(인코딩타입)로 됐을 수 있는 원본파일이름을 UTF-8로 인코딩해주는 역할이다.

쿠키나 리다이렉트와 같이 Response를 사용하는 부분에서도 사용할 수 있겠다.

 

 

 

728x90
저작자표시 (새창열림)

'SPRING > IceWater Community' 카테고리의 다른 글

[스프링]게시판 글작성 에디터 적용과 파일미리보기,이미지 미리보기  (2) 2021.08.30
[스프링] 첨부파일 다중파일 구현, 수정,삭제 로직의 설명(4)  (2) 2021.08.30
[스프링] 게시글 첨부파일 조회 구현 설명(select) (2)  (3) 2021.08.30
[스프링]게시판 첨부파일 업로드 구현 설명(insert) (1)  (1) 2021.08.30
[스프링]-댓글 수 구현 : 동기,비동기 방식을 사용할 때의 구현, 차이점과 2가지의 댓글 수 변경 로직  (0) 2021.08.26
    'SPRING/IceWater Community' 카테고리의 다른 글
    • [스프링]게시판 글작성 에디터 적용과 파일미리보기,이미지 미리보기
    • [스프링] 첨부파일 다중파일 구현, 수정,삭제 로직의 설명(4)
    • [스프링] 게시글 첨부파일 조회 구현 설명(select) (2)
    • [스프링]게시판 첨부파일 업로드 구현 설명(insert) (1)
    간펴니
    간펴니
    개발공부 기록하는 곳

    티스토리툴바