이아퀸타
341
2021-05-13 14:59:43
4
97

자바에서 MultipartFile 로 transferTo() 메서드 사용하는경우 close() 하기 질문이요


제가 MultipartFile 을 이용해 transferTo로 파일을 쓰는데 close를 어떻게 해야할지 모르겠습니다.


단일 파일 업로드 할때는 

즉, File과 FileOutputStream을 이용할때는

write와 close가 잘됐습니다. 

그런데 transferTo를 사용하려고 할 때는

write는 fransferTo 가 write 해주는걸로 알고 있는데 close를 어떻게 해야할지 모르겠습니다.


일단 단일 파일 업로드의 경우에는

전역변수는 다음과 같고

private File fData = null;

private FileOutputStream fsout = null;


단일 파일을 업로드할 땐 다음과 같이 file 업로드하고 close 해줬습니다.

MultipartFile uploadfile = multipartHttpServletRequest.getFile("fileInfo");

String FilePath = FilePathFunctions.combinePaths(경로);
fData = new File(FilePath);
fsout = new FileOutputStream(fData);

/ / db에 파일 넣는 함수 발생함

fsout.write(uploadfile.getBytes());
fsout.flush();
fsout.close();



그런데 단일 파일 업로드에서 다중 업로드할 때 경로 문제 때문에 transferTo 로 파일을 업로드 해주려고 합니다.

MultipartFile uploadfile = multipartHttpServletRequest.getFile("fileInfo");

String FilePath = FilePathFunctions.combinePaths(경로);
uploadfile.transferTo(new File(FilePath));

// db에 파일 넣는 함수 발생함

이렇게  transferTo를 사용하니

다중업로드가 아주 잘됐습니다.


단일과 다중 2가지 경우 모두 업로드하는 파일하나당 컨트롤러를 들어와야 합니다. 이건 크게 중요하지 않은것같고


즉 제 질문은 transferTo() 메서드를 사용하는데 write는 transferTo() 가 write하는걸로 알고있는데

close를 어떻게 해주나요?


단일 경우에서는 fsout.write()로 쓰고

다중의 경우는 uploadfile.fransferTo로 썼는데


transferTo를 사용하면 어떻게 close를 해줘야할까요?

0
  • 답변 4

  • Dierslair
    4k
    2021-05-13 16:09:16

    저는 transferTo 보다는 그냥 InputStream을 사용합니다

    try (InputStream in = multipartFile.getInputStream()) {
        Files.copy(in, file);
    }


  • 오늘도공부
    254
    2021-05-13 16:30:34
    transferTo()는 내부적으로 FileCopyUtils.copy 를 사용하며 해당 메서드를 보면 inputstream과 outputstream을 close하고 있어서 별도의 처리는 필요 없습니다.
  • 이아퀸타
    341
    2021-05-13 16:33:24

     John Suhr

    참고하겠습니다 감사합니다.



  • 이아퀸타
    341
    2021-05-13 16:34:09

    오늘도공부

    감사합니다 그런데 말씀하신 정보는 어디서 얻으신거죠?

    transferTo() 메서드 위에 마우스를 갖다데도 그런내용은 안나와서요


  • 로그인을 하시면 답변을 등록할 수 있습니다.