@Data
public static class BoardImgUploadDto{
private List<MultipartFile> files;
}
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public BaseResponse<List<BoardImgResultDto>> upload(BoardImgUploadDto uploadDto){
log.info("uploadFile = {}", uploadDto);
List<BoardImgResultDto> upload = imgService.upload(uploadDto);
return BaseResponse.of("파일 업로드가 완료되었습니다", upload);
}
여기서 Key는 UploadDto의 변수명으로 설정한다.
이유는 모르겠지만 @RequestParam이나 @RequestPart를 사용하지 않았는데도 파일 업로드가 가능했다..
public String getLink(){
if (img){
return "s_" + uuid + "_" + fileName;
}else {
return uuid + "_" + fileName;
}
}
getLink()는 나중에 JSON으로 처리될 때 link라는 속성으로 자동 처리된다. 실제로 결과값에 link가 나왔는데 getLink()메서드를 사용하는 곳이 없는데 어떻게 처리된건지 모르겠다.
Path와 File는 거의 같은 기능을 제공한다. 하지만 여러면에서 Path가 더 좋다
Paths
: Paths 클래스는 Java NIO(새로운 입출력) 패키지에서 제공되는 클래스로, 파일 경로를 다루기 위한 유틸리티 클래스입니다. Paths 클래스는 파일 경로를 생성하고 조작하는 메서드들을 제공하여 파일 시스템과 상호작용할 수 있도록 도와줍니다.
get(String first, String... more): 지정된 경로 구성 요소들을 결합하여 새로운 경로를 생성합니다.
get(URI uri): 지정된 URI를 기반으로 새로운 경로를 생성합니다.
get(File file): 지정된 java.io.File 객체를 기반으로 새로운 경로를 생성합니다.
get(String pathname): 지정된 문자열 경로를 기반으로 새로운 경로를 생성합니다.
getPath(String first, String... more): get() 메서드와 동일하게 경로를 생성합니다.
get(URI uri): get() 메서드와 동일하게 경로를 생성합니다.
get(File file): get() 메서드와 동일하게 경로를 생성합니다.
get(String pathname): get() 메서드와 동일하게 경로를 생성합니다.
write(Path path, byte[] bytes, OpenOption... options): 지정된 경로에 바이트 배열을 쓰는 메서드입니다.
createDirectory(Path dir, FileAttribute<?>... attrs): 지정된 경로에 디렉토리를 생성하는 메서드입니다.
createFile(Path path, FileAttribute<?>... attrs): 지정된 경로에 파일을 생성하는 메서드입니다.
delete(Path path): 지정된 경로의 파일이나 디렉토리를 삭제하는 메서드입니다.
move(Path source, Path target, CopyOption... options): 파일이나 디렉토리를 다른 경로로 이동하는 메서드입니다.
copy(Path source, Path target, CopyOption... options): 파일이나 디렉토리를 다른 경로로 복사하는 메서드입니다.
readAllBytes(Path path): 지정된 경로에 있는 파일의 모든 바이트를 읽어옵니다.
readAllLines(Path path, Charset cs): 지정된 경로에 있는 파일의 모든 텍스트 라인을 읽어옵니다.
Files
: 파일과 디렉토리를 다루는 다양한 메서드를 제공하여 파일 입출력, 디렉토리 조작, 파일 속성 조회 등 다양한 파일 관련 작업을 수행할 수 있도록 도와줍니다.
createDirectory(Path dir, FileAttribute<?>... attrs): 지정된 경로에 디렉토리를 생성합니다.
createDirectories(Path dir, FileAttribute<?>... attrs): 지정된 경로와 그 부모 디렉토리들을 모두 생성합니다.
createFile(Path path, FileAttribute<?>... attrs): 지정된 경로에 빈 파일을 생성합니다.
delete(Path path): 지정된 경로의 파일이나 디렉토리를 삭제합니다.
deleteIfExists(Path path): 지정된 경로의 파일이나 디렉토리가 존재하는 경우 삭제합니다.
move(Path source, Path target, CopyOption... options): 파일이나 디렉토리를 다른 경로로 이동합니다.
copy(Path source, Path target, CopyOption... options): 파일이나 디렉토리를 다른 경로로 복사합니다.
readAllBytes(Path path): 지정된 경로에 있는 파일의 모든 바이트를 읽어옵니다.
readAllLines(Path path, Charset cs): 지정된 경로에 있는 파일의 모든 텍스트 라인을 읽어옵니다.
write(Path path, byte[] bytes, OpenOption... options): 지정된 경로에 바이트 배열을 씁니다.
write(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options): 지정된 경로에 텍스트 라인을 씁니다.
isDirectory(Path path, LinkOption... options): 지정된 경로가 디렉토리인지 확인합니다.
isRegularFile(Path path, LinkOption... options): 지정된 경로가 일반 파일인지 확인합니다.
isSymbolicLink(Path path): 지정된 경로가 심볼릭 링크인지 확인합니다.
exists(Path path, LinkOption... options): 지정된 경로가 존재하는지 확인합니다.
probeContentType(Path path): 지정된 경로에 대한 콘텐츠 유형(MIME 타입)을 확인합니다. (ex. image/png, text/html , application/json, video/avi 등)
Thumbnailator
: Java용 이미지 크기 조절 라이브러리로서, 이미지를 리사이징하거나 썸네일을 생성하는 데 사용됩니다.
createThumbnail(File inputFile, File outputFile, int width, int height): 이미지를 지정된 크기로 축소하여 저장합니다.
createThumbnail(File inputFile, File outputFile, int width, int height, double quality): 이미지를 지정된 크기로 축소하고, 지정된 품질로 저장합니다.
size(int width, int height): 이미지의 크기를 지정합니다.
scale(double scale): 이미지의 크기를 비율로 조절합니다.
rotate(double degrees): 이미지를 지정된 각도로 회전시킵니다.
rotate(Rotation rotation): 이미지를 지정된 회전 방향으로 회전시킵니다.
region(int x, int y, int width, int height): 이미지의 특정 영역을 잘라냅니다.
sourceRegion(Position position, int width, int height): 이미지의 원본에서 지정된 위치의 영역을 잘라냅니다.
watermark(Position position, BufferedImage watermarkImage, float transparency): 이미지에 워터마크를 추가합니다.
outputFormat(String format): 이미지를 지정된 형식으로 출력합니다.
toOutputStream(OutputStream outputStream): 처리된 이미지를 OutputStream으로 출력합니다.
asBufferedImage(): 처리된 이미지를 BufferedImage로 변환합니다.
asFiles(): 처리된 이미지를 File 형식으로 저장합니다.
of(File inputFile): 처리할 이미지 파일을 지정합니다.
of(InputStream inputStream): 처리할 이미지를 InputStream으로 지정합니다.
FileSystemResource
: 파일 시스템에 있는 리소스를 가져오는데에 사용됩니다. 주로 파일 시스템에서 파일을 읽거나 쓸 때 사용되며, 웹 애플리케이션에서 파일 다운로드 등에 자주 활용됩니다.
FileSystemResource resource =
new FileSystemResource(uploadPath + File.separator + fileName);
File.separator은 파일 시스템에서 운영체제에 맞게
디렉토리 구분자(`/`, `\`)를 나타내는 상수입니다.
예를 들어 윈도우인 경우
C:\shop\item\example.jpg
macOs인 경우
/shop/item/example.jpg
getFilename(): 파일의 이름을 반환합니다.
getDescription(): 리소스의 설명을 반환합니다.
getFile(): 리소스를 File 객체로 반환합니다.
getInputStream(): 리소스를 InputStream으로 읽기 위한 스트림으로 반환합니다.
isOpen(): 리소스가 열려 있는지 여부를 확인합니다. (항상 false를 반환합니다.)
isFile(): 리소스가 파일을 나타내는지 여부를 확인합니다. (항상 true를 반환합니다.)
isReadable(): 리소스를 읽을 수 있는지 여부를 확인합니다.
lastModified(): 리소스의 최근 수정 시간을 반환합니다.
length(): 리소스의 크기를 반환합니다.
createRelative(String relativePath): 상대 경로에 해당하는 리소스를 생성합니다.
exists(): 리소스가 존재하는지 여부를 확인합니다.
getFileURL(): 리소스의 URL을 반환합니다.
getURI(): 리소스의 URI를 반환합니다.