20240312 전자정부(파일업로드)

2024. 3. 12. 11:502023.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";
	}

 

try.catch

 

 

 

	//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());

 

UUID 이름 저장

 

 

 

 

 

 

 

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