환경
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import java.nio.file.Files;
...
@Controller
public class FileController {
@GetMapping("/download")
public ResponseEntity<byte[]> download(HttpServletRequest request, Model model){
// TODO: 필요할 경우 여기에 권한 검증 로직 추가
// 아래의 값들은 DB조회 등을 통해 가져온다고 가정
String fileFullPath = "blabla~"; // file physical full path
String oriFileName = "blabla~"; // 원본 파일명
File file = new File(fileFullPath);
if(!file.exists()){
throw new RuntimeException("파일이 존재하지 않습니다.");
}
try{
byte[] fileBytes = Files.readAllBytes(file.toPath());
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
// 파일명 charset 변환을 하지 않으면 한글 파일명 파일 다운로드시 오류 발생
headers.setContentDispositionFormData("attachment", new String(oriFileName.getBytes("UTF-8"), "ISO-8859-1"));
return new ResponseEntity<>(fileBytes, headers, HttpStatus.OK);
}catch(IOException e){
log.error("", e);
}
return null;
}
}