본문 바로가기
스프링

파일 업로드

by moonstal 2022. 6. 21.

파일 업로드

  • enctype="multipart/form-data"
  • 여러 파일과 폼의 내용을 함께 전송

서블릿 파일 업로드

  • application.properties에 file.dir=C:/file/
    //컨트롤러에 등록
    @Value("${file.dir}")
    private String fileDir;

    //파일 저장
    if (StringUtils.hasText(part.getSubmittedFileName())) {
        String fullPath = fileDir + part.getSubmittedFileName();
        part.write(fullPath);
    }

스프링 파일 업로드

  • @RequestParam MultipartFile file
    if (!file.isEmpty()) {
        String fullPath = fileDir + file.getOriginalFilename();
        file.transferTo(new File(fullPath));
    }

파일 업로드, 다운로드

  • Item
    private UploadFile attachFile;//첨부파일 하나
    private List<UploadFile> imageFiles;//이미지 파일 여러개
  • UploadFile에 uploadFileName(고객 업로드), storeFileName(서버 내부에서 관리)

  • FileStore: 파일 저장과 관련된 업무

  1. MultipartFile 받아서 있으면 multipartFile.getOriginalFilename()을 확장자만 잘라 uuid로 storeFileName만들어줌
  2. 전체 경로 만들어 저장 multipartFile.transferTo(new File(getFullPath(storeFileName)));
  3. new UploadFile(originalFilename, storeFileName);
  • ItemForm 상품저장용
    private MultipartFile attachFile;
    private List<MultipartFile> imageFiles;
  • 컨트롤러에서 UploadFile로 만들어 저장
    UploadFile attachFile = fileStore.storeFile(form.getAttachFile());
    List<UploadFile> storeImageFiles = fileStore.storeFiles(form.getImageFiles());
  • 다운로드
    //아이템 id로 찾아서 storeFileName의 전체경로 만들어 바디에 넣기
    UrlResource resource = new UrlResource("file:" + fileStore.getFullPath(storeFileName));

    //uploadFileName찾아서 contentDisposition만들고 헤더에 넣기
    UriUtils.encode(uploadFileName, StandardCharsets.UTF_8);
    String contentDisposition = "attachment; filename=\"" +encodedUploadFileName + "\"";

    return ResponseEntity.ok()
        .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
        .body(resource);

링크

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2

'스프링' 카테고리의 다른 글

[스프링 부트와 JPA 활용] API 개발과 성능 최적화  (0) 2022.07.03
[스프링 부트와 JPA 활용] 웹 애플리케이션 개발  (0) 2022.06.22
타입 컨버터  (0) 2022.06.20
예외 처리  (0) 2022.06.19
로그인  (0) 2022.06.18