본문 바로가기
자바(Java)/자바(Java) 잡다

자바(Java) Multipart / MultipartFile / File (파일 업로드 관련)

by 인생즐겜러 2022. 12. 18.
728x90
반응형

 

HttpServletRequest는 파일 업로드를 지원 안함.

  • HttpServletRequest는 http 프로토콜의 body부분을 읽어들이는 input 스트림만을 지원
  • 개발자는 이 스트림을 이용해서 Multipart 부분을 나누어서 사용.
    보통은 구현보다는 라이브러리를 사용.
  • 대표적인 라이브러리가 Apache 의 commons-fileupload.
  • Spring MVC에서는 MultipartResolver Bean 도 추가 해야 함. (업로드 요청 처리를 하는 인터페이스)

 

 

 

 

 

Multipart란?

  • 보통 파일을 전송할 때 사용
  • 요청 시, http body 에 데이터를 여러 부분으로 나눠 보냄.
  • 파일을 여러개 업로드 시, body 부분에 파일이 마찬가지로 여러 부분으로 연결 전송된다.
    이렇게 나눠져 전송되는 것을 Multipart data라고 함.

 

 

 

 

 

MultipartFile 

 

  • Spring에서 제공하는 타입
  • 업로드한 File을 핸들러에서 쉽게 다룰 수 있게 하는 매개변수

 

 

 

메소드의 종류

 

Method 설명
String getName() 파라미터의 이름 <input> 태그의 이름
String getOriginalFileName() 업로드 되는 파일의 이름
boolean isEmpty() 파일이 존재하지 않는 경우 true
long getSize() 업로드 되는 파일의 크기
byte[] getBytes() byte[]로 파일 데이터 변환
InputStream getInputStream() 파일 데이터와 연결된 InputStream을 반환
transferTo(File file) 파일의 저장

 

 

 

 

 


 

 

 

 

 

File

 

  • 자바 제공 클래스
  • 파일과 디렉토리를 다룰 수 있게 한다.
    => File 인스턴스는 File 일 수도 있고 directory일 수도 있다.

 

 

 

 

 

 

생성자 설명
File(String pathname) 입력한 pathname(파일명 포함) 경로 파일의 객체를 생성.
File(String parent, String child) parent 디렉토리 경로의 child 파일에 대한 객체를 생성.
File(File parent, String child) 파일 객체 parent의 child 파일에 대한 객체를 생성.
File(URI uri) uri 경로에 대한 파일 객체를 생성.

 

 

 

위의 생성자의 이해를 돕기 위해

예를 들면

 

String uploadPath = C:\Users\0rcti\Desktop\ImgData;
String datePath = 2022/12/20;
File savePath = new File(uploadPath, datePath);

이라면

 

savaPath의 값은

C:\Users\0rcti\Desktop\ImgData\2022/12/20

이렇게 들어간다.

여기서 경로의 경우, 윈도우는 \ , 맥은 / 로 들어간다.

 

 

 

만약 아래처럼 저 첫번째 자리에 String이 아닌 File 객체를 넣게 되면

String uploadFileName = 9e998d77d8;
File savePath2 = new File(savePath, uploadFileName);

savaPath의 값은

C:\Users\0rcti\Desktop\ImgData\2022/12/20\9e998d77d8

이렇게 들어간다.

 

한 마디로, File 객체를 File 객체로 둘러싼다고 해도

담겨 있는 데이터는 어차피 긴 문자열이라는 말이다.

 

 

 

 

 

파일/폴더/하드디스크 관련 함수

 

Method 설명
File getAbsoluteFile() 파일의 절대 경로를 반환.
String getAbsolutePath() 파일의 절대 경로를 문자열로 반환.
File getCanonicalFile() 파일의 정규 경로를 반환.
String getCanonicalPath() 파일의 정규 경로를 문자열로 반환.
String getName() 파일이나 폴더의 이름을 넘겨준다.
String getParent() 부모 경로에 대한 경로명을 문자열로 반환.
File getParentFile() 부모 폴더를 File의 형태로 반환.
String getPath() 파일의 경로를 문자열의 형태로 반환.
long getTotalSpace() 하드디스크의 총 용량을 반환.
long getUsableSpace() 하드디스크의 사용 가능한 용량을 반환.
long getFreeSpace() 하드디스크의 남은 공간을 반환.
int hashCode() hash code를 반환.
long lastModified() 해당 경로 파일의 최종 수정 일자를 반환.
long length() 해당 경로 파일의 길이를 반환.
Path toPath() java.nio.file.Path 객체로 반환.
URI toURI() URI 형태로 파일 경로를 반환.
File[] listRoots() 하드디스크의 루트 경로를 반환.
String[] list() 경로의 파일들과 폴더를 문자열 배열로 반환.
String[] list(FilenameFilter filter) filter에 만족되는 파일들과 폴더 이름을 문자열 배열로 반환.
File[] listFiles() 해당 경로의 파일들과 폴더의 파일을 배열로 반환.
File[] listFiles(FileFilter filter) filter에 만족되는 파일들과 폴더를 File 배열로 반환.
File[] listFiles(FilenameFilter filter) filter에 만족되는 파일들과 폴더를 File 배열로 반환.

 

 

 

 

 

파일 / 폴더 생성, 수정, 삭제 관련 함수

 

Method 설명
boolean createNewFile() 주어진 이름의 파일이 없으면 새로 생성.
static File createTempFile(String prefix, String suffix) 파일명에 prefix와 suffix(null이면 .tmp)를 붙여
임시 파일을 기본 임시 파일 디렉토리에 생성.
static File createTempFile(String prefix, String suffix, File directory) 파일명에 입력한 prefix와 suffix(null이면 .tmp)를 붙여
directory에 임시 파일을 생성.
boolean delete() 파일이나 디렉토리를 삭제.
단, 디렉토리가 비어있지 않으면 삭제할 수 없다.
void deleteOnExit() 자바 가상 머신이 끝날 때 파일을 삭제.
boolean mkdir() 해당 경로에 폴더를 생성.
생성 성공하면 true, 실패하면 false을 반환.
boolean mkdirs() 존재하지 않는 부모 디렉토리까지 포함하여
해당 경로에 폴더를 만든다.
boolean renameTo(File dest) 파일를 dest 로 변경.
이름뿐 아니라 경로도 변경.

 

728x90
반응형

댓글