첨부파일을 다운로드까지 하기 위해서는 Http 응답정보 셋팅필요. ( 요청Path )

 

 

컨트롤러

//첨부파일 다운로드  ( @PathVariable ; path에서 변수로 쓰겠다)
	@RequestMapping("dealDownload/{member_id}/{deal_number}/{dealFile_number}")
	public ResponseEntity<UrlResource> downloadFile(@PathVariable String member_id, @PathVariable int deal_number, @PathVariable int dealFile_number, HttpSession session) throws MalformedURLException, FileNotFoundException, UnsupportedEncodingException {
//		ResponseEntity<UrlResource> 란?  HttpEntity / ResponseEntity 상속받고있음
//		HttpEntity란? Http의 요청과 응답을 관리하는 객체(요청헤더,바디,응답헤더,바디)
//		ResponseEntity란? 응답데이터를 관리하는 객체 (Http헤더, Http바디, Http상태정보)
//		UrlResource란? 첨부파일 다운로드되는파일객체를 다루기 위해 스프링내부에서 사용하는 객체	
//					  사용자가 링크를 클릭할때 이것은 일반html열기가 아니라 파일을 다운로드 하는것이고,
//                    결국 스프링에있는 File os를 통해서 꺼내게 되는데, 그 File os를 관리하는게 urlResource  
		
		//System.out.println("첨부파일 다운로드 파라미터 체크 : member_id" + member_id +",  " + deal_number+",  " + dealFile_number );
		
		//전달받은 파라미터(글번호,파일번호) 이용해서 파일조회 후, 가져오기
		DealFile_DTO selectFile = service.getFile(deal_number, dealFile_number);
		//System.out.println("첨부파일 다운로드 체크: "+ service.getFile(deal_number, dealFile_number));
		
		//파일명을 이용해서 다운로드할 파일을 객체로 생성하기
		//UrlResource resource = new UrlResource("file:" + 파일의 전체경로)  +@ 업로드될 서버의 경로(Path가 필요) 
		UrlResource resource = new UrlResource("file:" + WebUtils.getRealPath(session.getServletContext(), "/WEB-INF/dealUpload/"+selectFile.getStoreFilename()));
		
		//파일명에 한글이 있는경우 오류 발생치 않도록 처리
		//String encodeFilename = UriUtils.encode(파일이름, "UTF-8");
		String encodeedFilename = UriUtils.encode(selectFile.getOriginalFilename(), "UTF-8");
		String mycontenttype = "attachment; filename=\"" + encodeedFilename + "\""; // \" = "넣기위해
		
		return ResponseEntity.ok() //.ok는 BodyBuilder 사용하며, 정상적으로 200번으로 실행됬을때를말함
				.header(HttpHeaders.CONTENT_DISPOSITION, mycontenttype) //.header(헤더명,헤더value)  // 헤더명 : HttpHeaders.CONTENT_DISPOSITION는 실제 response body의 타입이 뭔지 알려줌(즉 헤더에서, 이건 다운로드야 알려줌)
				.body(resource);  //바디에 실제 다운로드될 resource 넣어줌 
	}

DAOImpl

//첨부파일 가져오기(다운로드)
	@Override
	public DealFile_DTO getFile(int deal_number, int dealFile_number) {
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.put("deal_number", deal_number);
		map.put("dealFile_number", dealFile_number);
		System.out.println("DAOImpl map체크 : " + map);
		return sqlSession.selectOne("com.multi.ongo.deal.getFile", map);
	}

 

mybatis mapper

		<!-- 첨부파일 가져오기(다운로드) -->
	<select id="getFile" parameterType="Map" resultType="fileDTO">
		select * from deal_file
		where deal_number=#{deal_number} and dealFile_number=#{dealFile_number}
	</select>

 

read.jsp

<c:forEach var="file" items="${filedtolist}" >
	<label for="HOFS_DTADR"><a href="/ongo/dealDownload/${dealRead.member_id}/${dealRead.deal_number}/${file.dealFile_number}">${file.originalFilename}</a></label><br/>
</c:forEach>

'스프링MVC' 카테고리의 다른 글

json  (0) 2023.01.18
ajax  (0) 2023.01.18
@PathVariable 사용  (0) 2023.01.18
스프링-파일업로드(1) 작업흐름 (mybatis사용)  (0) 2023.01.18
스프링-파일업로드(1) 작업흐름 (mybatis사용)  (0) 2023.01.16

+ Recent posts