반응형

정리(파일 업로드)

 

  • 파일 업로드 소개
    • HTML Form을 통한 파일 업로드를 이해하려면 먼저 폼을 전송하는 다음 두 가지 방식의 차이를 이해해야 한다.
      • application/x-www-form-urlencoded
      • multipart/form-data
  • 프로젝트 생성
  • 서블릿과 파일 업로드1
    • 서블릿은 multipart를 지원한다.  그래서 request.getParts()를 하면 part를 받을 수 있다. 
    • 이것을 사용하려면 spring.servlet.multipart.enabled=true로 켜져있어야 한다. 이것이 꺼져있으면 WAS자체가 이것은 multipart를 사용하지 않는구나 하고서 아예 기능을 지원하지 않게된다.
  • 서블릿과 파일 업로드2
    • 서블릿이 제공하는 Part에 대해 알아보았다.
    • 먼저 application.properteis에 내가 업로드할 파일 경로를 설정했었다. file.dir=업로드 경로 설정
    • Part의 주요 메서드들을 이용해서 편리하게 저장할 수 있따.
      • part.getSubmittedFileName() : 클라이언트가 전달한 파일명
      • part.getInputStream() : Part의 전송 데이터를 읽을 수 있다.
      • part.write(...) : Part를 통해 전송된 데이터를 저장할 수 있다.
  • 스프링과 파일 업로드
    • @RequestParam MultipartFile file 이라는 것을 사용
    • MultipartFile 주요 메서드
      • file.getOriginalFilename() : 업로드 파일 명
      • file.transferTo(...) : 파일 저장
  • 예제로 구현하는 파일 업로드, 다운로드
    • 실제 이미지를 불러오고, 첨부파일을 다운로드 할 수 있도록 구현해 보았다.
    • 핵심은, 데이터베이스에 이미지 바이너리를 다 올리지 않는다는 것이다.
      파일은 AWS쓰면 S3, 혹은 서버에는 어떤 특정한 경로에 저장을 해놓는 등 여러가지 방식이 있는데, 
      기본적으로 어떤 디렉토리에 저장을 하고, 그 보관된 경로만 데이터베이스에 저장한다.
      경로도 전체경로를 저장하는 것이 아닌, 기본 베이스경로는 애플리케이션 어딘가에 저장을 해놓고,
      실제 데이터 베이스에는 그이후의 짧은 경로만 저장한다.
    • 이미지를 보여줄 때는, 데이터베이스에 저장해둔 uuid+파일형태를 이용해서 실제 바이너리데이터를 웹브라우저에 전송해주고,
      고객에게 보여주는 해당 파일의 이름은 고객이 업로드할 때 사용한 이름을 보여주도록 한다.
    • 파일을 다운로드 받을 수 있게 하기 위해서는
      contentDisposition이라는 헤더에 "attachment; filename=\"" + encodeUploadFileName + "\""; 를 넣어줘야한다.
  • 정리

반응형