20240312 전자정부(파일업로드)
2024. 3. 12. 11:50ㆍ2023.11.21-2024.05.31
파일업로드(fileUp)
html 만들기
login.html복사>fileUp 생성
<div class="">
<form action="/fileUp" method="post" enctype="multipart/form-data">
<input type="file" name="fileUp">
<button type="submit">파일업로드</button>
</form>
<div>
IndexController > fileUp 작성
//20240312
@GetMapping("/fileUp")
public String fileUp() {
return "fileUp";
}
//20240312
@PostMapping("/fileUp")
public String fileUp(@RequestParam("fileUp") MultipartFile file) {
System.out.println(file.getName());
System.out.println(file.getSize());
System.out.println(file.getOriginalFilename());
return "reirect:/fileUp";
}
# DB
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://guro.wisejia.com:3308/c23c_22
spring.datasource.username=c23c_22
spring.datasource.password=01234567
# mybatis
mybatis.type-aliases-package=com.mask.web.dto
# 페이지 구동되면 아래 static 하위 폴더들이 먼저 실행 됨
mybatis.mapper-locations=static/mapper/*.xml
# 포트변경시
server.port=80
#session time out = 1800 ->30분
server.servlet.session.timeout=1800
#에러페이지
#에러 페이지에 exception 정보 포함?true/false
server.error.include-exception=true
#에러 페이지에 stacktrace 포함? ALWAYS/NEVER/ON_TRACE_PARAM
server.error.include-stacktrace=always
#기본 노출 페이지
server.error.whitelabel.enabled=true
#에러 응답처리 할 path
#server.error.path=/error
#fileUp
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=50MB
spring.servlet.multipart.enabled=true
IndexController > fileUp
//20240312
@PostMapping("/fileUp")
public String fileUp(@RequestParam("fileUp") MultipartFile file) {
System.out.println(file.getName());
System.out.println(file.getSize());
System.out.println(file.getOriginalFilename());
String url = util.req().getServletContext().getRealPath("/upload");
File upFileName = new File(new File(url),file.getOriginalFilename());
System.out.println(url);
try {
file.transferTo(upFileName);
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
System.out.println("실제 경로 : " + url);
return "reirect:/fileUp";
}
//20240312
@PostMapping("/fileUp")
public String fileUp(@RequestParam("fileUp") MultipartFile file) {
System.out.println(file.getName());
System.out.println(file.getSize());
System.out.println(file.getOriginalFilename());
//String url = util.req().getServletContext().getRealPath("/upload");
File url = new File(util.req().getServletContext().getRealPath("/upload"));
url.mkdirs();
File upFileName = new File(url, file.getOriginalFilename());
try {
file.transferTo(upFileName);
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
System.out.println("실제 경로 : " + url);
return "redirect:/fileUp";
}
@PostMapping("/fileUp") 안에 UUID 추가
//UUID를 붙이던지
//년월일시분초
//나노초
//파일 업로드시 UUID+실제 파일명.확장자
//파일 다운로드시 원래 파일명.확장자 ----------------
//UUID
UUID uuid = UUID.randomUUID();
System.out.println("원본 파일명" + file.getOriginalFilename());
System.out.println("UUID 파일명" + uuid.toString() + file.getOriginalFilename());
//날짜를 뽑아서 파일명 변경하기
LocalDateTime ldt = LocalDateTime.now();
String ldtFormat = ldt.format(DateTimeFormatter.ofPattern("YYYYMMddHHmmSS"));
System.out.println("날짜 파일명 : " + ldtFormat + file.getOriginalFilename());
File upFileName = new File(url, ldtFormat + file.getOriginalFilename());
fileUp > 이미지 다운로드
<div class="container px-5">
<h1>파일 업로드</h1>
<div class="col-md-4 mx-auto">
<form action="/fileUp" method="post" enctype="multipart/form-data">
<input type="file" name="fileUp">
<button type="submit">파일업로드</button>
</form>
</div>
<button onclick="location.href='/downfile@도서관.png'">이미지 다운로드</button>
<br>
<img alt="img" src="/img/도서관.png">
</div>
IndexController > @GetMapping("/downfile@{file}") 수정
// downfile@파일명
@ResponseBody //응답을 바디에 바로 표시(?)
@GetMapping("/downfile@{file}") // path variable
public void down(@PathVariable("file") String file, HttpServletRequest request, HttpServletResponse response) {
System.out.println("경로에 들어온 파일명" + file);
String url = "/static/img/";
//File url = new File(util.req().getServletContext().getRealPath("/upload"));
File serverFile = new File(url, file);
try {
byte[] fileByte = FileCopyUtils.copyToByteArray(serverFile);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; fileName=\"" + URLEncoder.encode(url+file, "UTF-8")+"\";");
response.setHeader("Content-Transfer-Encoding", "binary");
response.getOutputStream().write(fileByte);
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
수정된 경로
File url = new File(util.req().getServletContext().getRealPath("/upload"));
File serverFile = new File(url, file);
'2023.11.21-2024.05.31' 카테고리의 다른 글
20240314 전자정부(JPA 정렬) (1) | 2024.03.14 |
---|---|
20240312 전자정부(스웨거) / 못써서 삭제했음 (1) | 2024.03.12 |
20240311 전자정부(DTO>Map 변경, 로그인 설정, 글삭제, 글수정) (0) | 2024.03.11 |
20240311 전자정부(DBeaver 24.0.0 설정, 로그인 설정, 메뉴 설정) (0) | 2024.03.11 |
20240308 전자정부(로그인2,로그아웃, 상세보기) (2) | 2024.03.08 |