개발 기록이
[JAVA] 파일 다운로드 url 생성하기 본문
프로젝트 내에 있는 특정 파일을 다운로드하는 url을 만들어보려고 한다.
(다운로드할 파일의 경로 : http://localhost:8080/resources/file/sample.pdf)
@RequestMapping("/downloadFile.do")
public void downloadFile(HttpServletResponse response) {
String fileUrl = "http://localhost:8080/resources/file/sample.pdf";
try {
Path tempFilePath = Files.createTempFile("sample", ".pdf");
URL url = new URL(fileUrl);
Files.copy(url.openStream(), tempFilePath, StandardCopyOption.REPLACE_EXISTING);
// 응답 헤더 설정
String originalFileName = "sample.pdf";
String encodedFileName = URLEncoder.encode(originalFileName, StandardCharsets.UTF_8.toString());
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");
// 파일을 읽어서 응답으로 전송
try (InputStream inputStream = Files.newInputStream(tempFilePath);
OutputStream outputStream = response.getOutputStream()) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
// 파일 다운로드한 후 저장된 임시 파일 삭제
Files.deleteIfExists(tempFilePath);
} catch (IOException e) {
e.printStackTrace();
}
}
1. fileUrl에 있는 파일이름과 동일하게 sample.pdf 임시파일 경로 생성
Path tempFilePath = Files.createTempFile("sample", ".pdf");
2. fileUrl 주소에 있는 파일에 접근할 수 있도록 URL 객체를 생성
URL url = new URL(fileUrl);
* URL(Uniform Resource Locator) : 웹 서버, 파일 서버 등에서 파일이나 데이터를 가져오는 데 필요한 기능을 제공하는 클래스
3. 지정된 주소(fileUrl)에 있는 파일을 읽어와서 임시 폴더에 임시 파일(tempFile)로 저장
Files.copy(url.openStream(), tempFilePath, StandardCopyOption.REPLACE_EXISTING);
4. HTTP 응답 헤더에 encodedFileName 이름으로 첨부 파일 다운로드 지정
response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");
// Content-Disposition: attachment; filename="sample.pdf"
5. 파일 데이터를 읽어서 HTTP 응답으로 전송
try (InputStream inputStream = Files.newInputStream(tempFilePath);
OutputStream outputStream = response.getOutputStream()) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
6. 파일 다운로드 완료 후 임시파일 삭제
Files.deleteIfExists(tempFilePath);
7. http://localhost:8080/downloadFile.do 이동 시 sample.pdf 파일이 다운로드됨
자바 아이콘 제작자: Alfredo Hernandez - Flaticon
출처 : OpenAI ChatGPT (https://openai.com)
'웹 개발 > Back-end' 카테고리의 다른 글
[JAVA] Math.random(), Random 클래스, SecureRandom 클래스로 난수 생성하기 (0) | 2024.07.10 |
---|---|
[JAVA] QRCode 이미지 생성하기 (0) | 2024.06.02 |
[JAVA] File, Files 클래스 정리 (0) | 2024.04.20 |
[웹개발] 파일기능(2) MultipartFile와 MultipartHttpServletRequest 로 파일 저장하기 (0) | 2024.04.13 |
[SpringBoot] @Controller redirect 하기 (0) | 2024.03.30 |