주소를 입력하고 엔터를 치면 바로 다운로드가 진행되는 컨트롤러 예제입니다. 만들어진 주소창에 입력해도 되고 자바스크립트의 location.href = 주소
를 사용할 수도 있습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.thymeleaf; | |
import java.io.File; | |
import java.io.FileInputStream; | |
import java.net.URLEncoder; | |
import javax.servlet.ServletOutputStream; | |
import javax.servlet.http.HttpServletRequest; | |
import javax.servlet.http.HttpServletResponse; | |
import org.springframework.http.HttpStatus; | |
import org.springframework.stereotype.Controller; | |
import org.springframework.web.bind.annotation.RequestMapping; | |
import org.springframework.web.bind.annotation.RequestMethod; | |
import org.springframework.web.bind.annotation.ResponseStatus; | |
@Controller | |
public class TestController { | |
@RequestMapping("/filedownload") | |
@ResponseStatus(HttpStatus.OK) // Thymeleaf 사용시 이것을 사용해야 에러가 발생하지 않음 | |
public void fileDownloadOnWebBroweser(HttpServletRequest req, HttpServletResponse res) throws Exception { | |
File f = new File("track.pptx"); | |
String downloadName = null; | |
String browser = req.getHeader("User-Agent"); | |
//파일 인코딩 | |
if(browser.contains("MSIE") || browser.contains("Trident") || browser.contains("Chrome")){ | |
//브라우저 확인 파일명 encode | |
downloadName = URLEncoder.encode(f.getName(), "UTF-8").replaceAll("\\+", "%20"); | |
}else{ | |
downloadName = new String(f.getName().getBytes("UTF-8"), "ISO-8859-1"); | |
} | |
res.setHeader("Content-Disposition", "attachment;filename=\"" + downloadName +"\""); | |
res.setContentType("application/octer-stream"); | |
res.setHeader("Content-Transfer-Encoding", "binary;"); | |
try(FileInputStream fis = new FileInputStream(f); | |
ServletOutputStream sos = res.getOutputStream(); ){ | |
byte[] b = new byte[1024]; | |
int data = 0; | |
while((data=(fis.read(b, 0, b.length))) != -1){ | |
sos.write(b, 0, data); | |
} | |
sos.flush(); | |
} catch(Exception e) { | |
throw e; | |
} | |
} | |
} |
5개의 댓글
곽소영 · 2021년 6월 2일 9:25 오후
서버에 있는 파일을 다운로드 받을 수 있는건가요?
서버경로를 어디에 입력하는 걸까요?
yoonbumtae (BGSMM) · 2021년 6월 2일 11:49 오후
File f = new File("track.pptx");
서버 하드디스크에서 해당 위치에 있는 track.pptx 파일을 인터넷에 전송하고 다운로드하는 예제입니다.파일 경로 및 이름은
new File
의 파라미터에서 설정 가능하며 getPath(), getAbsolutePath(), getCanonicalPath() 등으로 파일 위치를 알아낼 수 있습니다.sianke1991 · 2022년 2월 18일 12:13 오후
큰 도움이 되었습니다.
Java, Spring Boot 예제: 이미지를 클라이언트로부터 받아 파워포인트로 만들기 - BGSMM · 2019년 2월 18일 7:57 오후
[…] 다음과 같다. 이미지 업로드 과정 일부는 예전 글(링크)에서 설명하고 있다. PPT 관련 부분은 createPptx 메소드에 […]
자바스크립트: AJAX로 blob 타입의 리스폰스 가져오기(파일 다운로드) - BGSMM · 2019년 6월 5일 4:48 오후
[…] 백엔드 부분은 JSP, Spring: URL을 입력하면 파일이 바로 다운로드되게 하기 참조 […]