주소를 입력하고 엔터를 치면 바로 다운로드가 진행되는 컨트롤러 예제입니다. 만들어진 주소창에 입력해도 되고 자바스크립트의 location.href = 주소 를 사용할 수도 있습니다.


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;
}
}
}

문의 | 코멘트 또는 yoonbumtae@gmail.com




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을 입력하면 파일이 바로 다운로드되게 하기 참조 […]

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다