파일 업로드

Seung jun Cha·2023년 7월 28일
0
	@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를 반환합니다.

0개의 댓글