반응형
파일 DTO
import lombok.Data;
@Data
public class ServiceFileDTO {
private int file_no;
private int service_num;
private String file_name;
private String file_path;
}
파일 다운로드 컨트롤러 코드
@RequestMapping("fileDownload.do")
public void fileDownload(HttpServletRequest request, HttpServletResponse response,
@RequestParam("no") int fileNo) throws IOException {
//파일 이름과 파일 패스가 필요해서 가져옴
ServiceFileDTO fileDTO = this.dao.getOneUserFileToAdmin(fileNo);
System.out.println("fileDTO = " + fileDTO);
//파일과 현재 서블릿 연결
//String root = request.getSession().getServletContext().getRealPath("/"); ///webapp
//root는 이미지(파일)이 실제로 저장되어있는 폴더의 경로를 적어줌.
//폴더 우클릭 > properties에 경로 나옴
String root = "C:\\Users\\package\\src\\main\\webapp\\resources\\image_service\\upload\\";
String downLoadFile = root + fileDTO.getFile_path();
System.out.println(fileDTO.getFile_path());
//파일을 읽어오기 위한 스트림
FileInputStream fis = new FileInputStream(downLoadFile);
//속도를 빠르게 하기 위해 보조스트림 생성
BufferedInputStream bis = new BufferedInputStream(fis);
//읽어온 파일을 사용자에게 전달할 스트림 생성
ServletOutputStream sos = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(sos);
//파일명 처리 - 사용자가 받을 파일 : 크롬에서 파일명이 정상적으로 받아지게 처리해주는 것
String resFilename = new String(fileDTO.getFile_name().getBytes("UTF-8"), "ISO-8859-1");
//파일 다운로드를 위한 HTTP Header 설정
response.setContentType("application/octet-stream"); //파일의 형식으로 받아라 > 응답나가는 데이터 타입
response.setHeader("Content-Disposition", "attachment;filename="+resFilename); //파일의 이름 알려줌
//파일전송
while(true) {
//bis => 파일과 서블릿 연결 , bos => 서블릿과 사용자(브라우저, 클라이언트)와 연결되어있음
int read = bis.read(); //read() : 데이터가 없으면 -1을 반환함, input스트림으로 읽어옴
if(read != -1) {
bos.write(read); //데이터가 있으면 클라이언트한테 내보냄
}else {
break;
}
}
bos.close();
bis.close();
}
ServiceDAO 인터페이스
package com.service.model;
import java.util.ArrayList;
import java.util.List;
public interface ServiceDAO {
public ServiceFileDTO getOneUserFileToAdmin(int num);
ServiceDAO 인터페이스를 implements 받음
@Override
public ServiceFileDTO getOneUserFileToAdmin(int num) {
// TODO Auto-generated method stub
return this.sqlSession.selectOne("getOneFile", num);
}
mybatis 쿼리
<!-- 반환형 객체 -->
<select id="getOneFile" parameterType="int" resultType="com.service.model.ServiceFileDTO">
select * from service_file_trip where file_no = #{num }
</select>
300x250
'개발자 > 자바 & 스프링' 카테고리의 다른 글
사진 업로드 미리보기 (0) | 2023.02.21 |
---|---|
jQuery Ajax 방식 / Json / Gson (0) | 2023.02.19 |
스프링 마이바티스 자바 파일 업로드 / Spring - mybatis Java file upload (0) | 2023.02.14 |
Spring, mybatis 페이징 처리 / 자바 스프링 페이징 (0) | 2023.02.14 |
MVC 아키텍쳐 / MVC1, MVC2 패턴 (0) | 2023.02.13 |
댓글