Framework/Springboot
[Springboot] 스프링부트 파일 업로드 및 파일 다운로드
- -
728x90
반응형
[7주차] 2023.10.06 (금)
🔷 File Upload 🔷
1. 사용 전 application.properties 세팅
# 파일 업로드 #
spring.servlet.multipart.max-file-size=2097152
spring.servlet.multipart.max-request-size=2097152
2. 하나의 파일 업로드 사용법
(1) MultipartHttpServletRequest 이용 (제일 유연함)
// UploadController.java //
@Controller
public class UploadController {
@GetMapping("/upload1")
public String upload1() {
return "upload1";
}
@PostMapping("/upload1")
@ResponseBody
public String upload1Post(MultipartHttpServletRequest mRequest) {
MultipartFile mFile = mRequest.getFile("file");
String fileName = mFile.getOriginalFilename();
long size = mFile.getSize();
File folder = new File("C:/Users/user/Desktop/Module1_Web/Springboot/basic/files");
folder.mkdirs();
File file = new File("C:/Users/user/Desktop/Module1_Web/Springboot/basic/files/" + fileName);
try {
mFile.transferTo(file);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fileName + size;
}
}
// upload1.html //
<form method="post" enctype="multipart/form-data">
<input type="file" name="file"><br> <!-- vscode 에서 지원하는 기능 -->
<input type="submit" value="업로드">
</form>
(2) @RequestParam()이용
// UploadController.java //
@PostMapping("/upload2")
@ResponseBody
public String upload2(@RequestParam("file") MultipartFile mFile) {
String fileName = mFile.getOriginalFilename();
long size = mFile.getSize();
return fileName + size;
}
(3) @ModelAttribute 이용
// UploadController.java //
@PostMapping("/upload3")
@ResponseBody
public String upload3(@ModelAttribute FileInfo info) {
String fileName = info.getFile().getOriginalFilename();
long size = info.getFile().getSize();
return fileName + size;
}
3. 여러개의 파일 업로드 => 배열형태[] 로 설정
// UploadController.java //
@GetMapping("/upload5")
public String upload6() {
return "upload5";
}
@PostMapping("/upload5")
@ResponseBody
public String upload6Post(MultipartHttpServletRequest mRequest) {
String result = "";
Iterator<String> fileNames = mRequest.getFileNames();
while (fileNames.hasNext()) { // hasNext() => boolean 형식 반환, next() => String 반환
String fileName = fileNames.next(); // 데이터를 한개씩 불러옴
List<MultipartFile> mFiles = mRequest.getFiles(fileName);
for (MultipartFile mFile : mFiles) {
String oName = mFile.getOriginalFilename();
long size = mFile.getSize();
result += oName + " : " + size + "<br>";
}
}
return result;
}
// upload5.html //
<form method="post" enctype="multipart/form-data">
<div id="input-files">
<input type="file" name="file" multiple><br>
</div>
<button type="button">추가</button>
<input type="submit" value="업로드">
</form>
<script>
document.querySelector('button').addEventListener('click', () => {
const div = document.querySelector('#input-files');
const inputs = document.querySelectorAll('#input-files > input');
const input = `<input type="file" name="file${inputs.length}" multiple>`;
div.insertAdjacentHTML("afterbegin",input + "<br>")
});
</script>
🔷 File Download 🔷
// DownloadController.java //
@Controller
public class DownloadController {
@GetMapping("/download")
public ResponseEntity<Resource> download() throws Exception {
File file = new File("c:/study/lake.jpg");
InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
return ResponseEntity.ok()
.header("content-disposition",
"filename=" + URLEncoder.encode(file.getName(), "utf-8"))
.contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(resource);
}
}
728x90
반응형
'Framework > Springboot' 카테고리의 다른 글
[Springboot] 스프링부트 H2 연동 (0) | 2023.11.13 |
---|---|
[Springboot] 스프링부트 JPA (0) | 2023.11.13 |
[Springboot] 스프링부트 AOP, Filter, Interceptor 각 특징 및 사용법 (0) | 2023.10.05 |
[Springboot] 스프링부트 비밀번호 암호화 설정(SpringSecurity, PasswordEncoder) (0) | 2023.10.05 |
[Springboot] 스프링부트 Session 세션 사용법 (0) | 2023.10.04 |
Contents
소중한 공감 감사합니다🤗