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
반응형
'자바(Java) > 자바(Java) 잡다' 카테고리의 다른 글
자바(Java) Arrays.sort()와 Collections.sort() (0) | 2023.02.09 |
---|---|
자바(Java) Iterator와 hasNext() / next() / remove() (0) | 2023.02.02 |
자바(Java) 썸네일 라이브러리 Thumbnailator (0) | 2022.12.18 |
자바(Java) forEach() 사용법 (0) | 2022.12.09 |
자바(Java) int와 Integer의 차이 (0) | 2022.12.09 |
댓글