# MultipartFile

29개의 포스트
post-thumbnail

Spring Boot 에서 AWS S3에 파일 업로드하기

들어가며 프로젝트 진행 중 이미지나 오디오 파일 등을 저장해야하는 경우가 발생합니다. AWS S3 에 파일을 업로드하고 파일의 경로를 DB 에 저장하는 방법에 대해 알아보겠습니다. 구현 상황 도서의 표지 이미지와 음성 오디오 파일을 1개씩 저장해야 합니다. > S3의 AccessKey 와 SecretKey 발급 > JDK: 17 > Spring Boot: 3.1.3 application.yml AccessKey, SecretKey 는 외부에 노출되지 않도록 유의해야 합니다. build.gradle S3Config S3Service BookService 마치며 구현한 내용을 순서대로 따라오면 S3 파일 업로드를 성공할 수 있습니다. 최근 해커톤에 참여하면서 급하게 블로그 글을 찾아가면서 구현한 내용을 다시 정리한 내용입니다. 빠르게 파일 업로드 기능을 구현해야 하는 상

2023년 9월 10일
·
0개의 댓글
·
post-thumbnail

[SpringBoot] List<MultipartFile> 이용해서 파일 여러개 S3 저장하기

Springboot에서 이미지 객체 AWS S3로 업로드 하기 Frontend html input 태그 안에 multiple을 적어주면 사진을 여러장 선택 할 수 있게 됩니다. 그리고 이미지를 업로드 하게 되면 SpringBoot와 api 통신될 수 있게 설정 해보겠습니다. Controller 이

2023년 8월 6일
·
0개의 댓글
·
post-thumbnail

Spring boot 에서 S3 사용하기

✏️ S3 버킷 생성 Spring 을 통해 S3 에 파일을 업로드 하려면 ACL 을 활성화 해야 한다. 비활성화 상태라면 AmazonS3Exception: The bucket does not allow ACL이 발생한다 📍 퍼블랙 엑세스 허용 위에서 버킷을 생성할 때 퍼블릭으로 설정했어도 외부에선 이미지를 확인할 수 없기 때문에 ssr 이 아니라면 완전 퍼블릭으로 수정해줘야 한다. 버킷 -> 허용할 디렉토리 -> 권한 ![](https://velog.velcdn.com/image

2023년 6월 28일
·
0개의 댓글
·

spring request multipart file size 조정

alert으로 Maximum upload size of 1024 bytes exceeded 파일 에러가 잘 뜨다가 갑자기 Maximum upload size exceeded로만 뜨기 시작했다. ㅠㅠ > 👧원인 확인해보니 특정 서비스내에서 파일의 맥시멈 사이즈를 확인하도록 구현해놨는데, request부분에서 파일을 받아올 때(MultipartFile file) 기본적으로 사이즈를 체크하더라.. spring에서 지정해놓은 파일의 기본 사이즈는 1MB여서 1MB 이상 파일이면 아래 메소드에서 maxUploadSize를 -1로 받아와서 내가 지정해놓은 사이즈가 아닌(당연히 내가 만들어놓은 서비스를 안탔으니까..) 빈값으로 Maximum upload size exceeded 에러를 뱉어내는 것이였다… 💁‍♀️해결 찾아보니 application.properties 파일에서 맥시멈사이즈를 아래와 같이 세팅함으로써 커스텀할 수 있었다. *

2023년 6월 11일
·
0개의 댓글
·
post-thumbnail

Apache Tika와 MultipartFile

Apache Tika와 MultipartFile Apache Tika 다양한 파일 형식의 컨텐츠를 추출하고 분석하는 기능을 제공 그중 MIME Type 체크 기능을 업로드 파일의 유형을 확인하기 위해 Spring에서 사용해 보았다. MIME Type List Complete MIME Types List - FreeFormatter.com Gradle Dependency Apache Tika MIME Type 체크 예시 코드 예를 들어 확장자가 png인 이미지를 검사하면 image/png 같이 MIME Type을 확인할 수 있다. > 그런

2023년 5월 27일
·
0개의 댓글
·
post-thumbnail

[Spring MVC] 파일 업로드

파일업로드 파일 업로드 구현시 MultipartResolver와 MultipartFile 사용 파일 업로드 구현 방법 웹 어플리케이션의 설정 파일에 MultipartResolver를 등록합니다. 파일 업로드를 처리할 컨트롤러에서 MultipartFile 파라미터를 선언합니다. MultipartFile 객체를 사용하여 파일을 저장하거나 처리합니다. pom.xml에 파일 업로드를 위한 dependency 추가 MultipartResolver HTTP 요청에서 Multipart data를 읽어들이는 인터페이스 controller가 리턴하는 ViewName과 동일한 이름으로 bean id지정 form태그에 method, enctype 속성 반드시 지정 MultipartFile 클라이언트에서 전송된 파일 데이터를 나타내는 인터페이스 MultipartResolver를 사용하여 멀티파트 요

2023년 4월 27일
·
0개의 댓글
·

[Java] Multipart, MultipartFile, multipart/form-data

Multipart 웹 클라이언트가 서버에게 파일을 업로드할 때, http 프로토콜의 body 부분에 파일정보를 담아서 전송 파일을 한번에 여러개 전송을 하면 body 부분에 파일이 여러개의 부분으로 연결되어 전송된다 interface MultipartFile multipart.transferTo(File(경로) dest(대상)) : MultipartFile 객체에서 추출한 InputStream을 이용해 파일 시스템에 파일을 저장 : 대상 파일을 업로드할 위치를 File 객체로 지정하고, 이 파일 객체를 매개변수로 전달 Multipart/form-data 파일 업로드를 구현할 때, 클라이언트가 웹브라우저라면 을 통해서 파일을 등록해서 전송 웹 브라우저가 보내는 HTTP 메시지는 Content-Type 속성이 multipart/form-data로 지정되고 정해진 형식에 따라 메시지를 인코딩하여 전송 이를 처리하기 위한 서버는

2023년 3월 16일
·
0개의 댓글
·
post-thumbnail

파일 업로드 - Multipart

HTTP Multipart Multipart란 클라이언트에서 서버로 파일을 보낼 때 사용하는 Content Type이다. 클라이언트에서 보내는 요청을 찬찬히 뜯어보면 boundary=-----XXX 로 되어있는 것을 볼 수 있는데, 이는 각 Form 데이터의 경계를 나타내며, 이 경계를 기준으로 각각의 데이터를 표기하여 여러 타입의 데이터를 섞이지 않고 전달하는 것을 목적으로 만들어진 데이터 전송법이다. username과 age처럼 일반적인 데이터와 달리, 파일의 경우 Content-Type과 바이너리 데이터를 전송되는 것을 확인할 수 있다. HTTP 요청은 모두 문자열로 이루어지는데, 서버는 해당 요청을 받아 HTTP 스펙에 맞춰 이를 변환하는 작업을 진행해야한다. 만약 백엔드 프로그래

2023년 2월 22일
·
0개의 댓글
·
post-thumbnail

Controller test에서 requestBody 말고 requestPart(multipartFile용) 받아오기

문제 인지 controller test 코드를 짜던 도중 requestBody에 포함된 multipartFile을 받아오지 못한다는 것을 발견했다. 문제 원인 우선, multipartFile은 DTO로 받으면 안된다고 한다. 따라서, requestBody가 아닌 requestPart로 따로 받아와야한다고 한다. 또한, multipartFile을 제외한 DTO가 존재한다 하더라도 DTO와 multipartFile 모두 requestPart로 받아와야했다. 또한, 아래의 예시처럼 MockMvcRequestBuilders 이후 지금의 .post가 아닌 .patch의 형식을 사용하면 될 줄 알았지만 multipartFile에 대한 test의 MockMvcRequestBuilders는 기존과 달랐다. 심지어 이 경우 PostMapping이 default라 내가 기획한 PatchMapping에 대한 방법도 만들어야했다. 위 두 경우를 모두 해결해야했다.

2023년 1월 4일
·
0개의 댓글
·

SpringBoot Async를 이용한 multipartfile처리

문제 발생 위와 같이 Async 어노테이션을 통해 비동기 함수를 통해 multipartfile 처리 시 아래 오류가 발생합니다. 문제 원인 Controller를 통해 multipartfile 입력 시 웹서버 내부에 잠시 저장됩니다. 하지만, 해당 공간은 thread 별로 할당되므로 비동기 함수로 처리 시 다른 thread가 처리하게 되면 참조하지 못하게 되어 oSuchFileException이 발생합니다. 문제 해결 multipartfile을 로컬에 저장한 이후, 함수 종료 시 삭제하도록 하였습니다. 우선 multipartfile interface의 구현체로 CommonsMultipartFile을 채택하여 최소한의 조건으로 multipartfile을 구현하였습니다. implementation("commons-fileupload:commons-fileupload:1.4") 이후, static한 FileCo

2022년 11월 29일
·
0개의 댓글
·

[SPRING] 5장 컨트롤러 요청 처리

MemberController.java / registerForm.jsp 1. 컨트롤러 메서드 매개변수 주요 매개 변수 Model 이동 대상에 전달할 데이터를 가지고 있는 인터페이스 RedirectAttributes 리다이렉트 대상에 전달할 데이터를 가지고 있는 인터페이스 자바빈즈 클래스 요청 파라미터를 가지고 있는 자바빈즈 클래스 MultipartFile Multipart 요청을 사용해 업로드 된 파일 정보를 가지고 있는 인터페이스 BindingResult 도메인 클래스의 입력값 검증 결과를 가지고 있는 인터페이스 java.security.Principal 클라이언트 인증을 위한 사용자 정보를 가지고 있는 인터페이스 2. 요청 처리 1. URL 경로 상의 쿼리 파라미터 정보로부터 요청 데이터를 취득할 수 있다. > [요청과 처리] 요청 : /register?userId=hon

2022년 11월 29일
·
0개의 댓글
·

0901 개발일지

오늘 한 일 프로젝트 : 시안 수정사항 ppt 제작 완료, 파일서버 사용자 추가 배움 뉴스레터 : 참여 코너 소개글, 이미지 의뢰글 초안 작성 homey 사이드 프로젝트 인프런 스프링 핵심 원리 - 기본편 수강 중 : AppConfig 리팩터링 ~ 좋은 객체지향 설계의 5가지 원칙의 적용까지 수강 homey 사이드 프로젝트 MemoryRepository, ServiceImpl java test units 추가 첨부파일 관련 도메인 작성 JUnit 테스트 코드 작성 ServiceImpl, MemoryRepository에 대한 테스트 코드를 작성하고 잘 실행되는 것을 확인하였다. 근데 첨부파일 생각해보니 service에도 변화가 필요할 것 같아서 수정이 있을 듯. 첨부파일 정보 저장 테이블 데이터 타입 문제 기존 테이블 계획 : 첨부파일-사이즈 컬럼 타입이 numeric(8, 0)으로 되어있었다.

2022년 9월 1일
·
0개의 댓글
·
post-thumbnail

[Spring Boot] HTTP FormData 다중 파일 전송

결과적으로 별거 아니었는데 방법을 몰라 오래 헤맸다. 나같은 사람을 위해 상황 > 클라이언트측에서 여러개의 파일을 서버로 전송해야 했고 input | type=multiple 을 사용한게 아니여서 FileList 객체가 아닌 단일 객체 여러 개였다. 요청을 여러 번 보내고 싶지 않았고, 한번에 묶어 전송해야 했다. 파일 개수가 고정된 게 아니라서 서버 측에서 파라미터를 정해놓고 개별 파일을 받을 수 없었다. (배열 형태로 보내는게 필요했다) FileList 요청 & 처리에 대한 해답은 많았는데, 상대적으로 나와 같은 상황에 대한 정보가 적어 찾느라 애먹었다. 해결 클라이언트 클라이언트측에서 제한되는 사항을 정리하면 아래와 같다. FormData 내에 배열로 파일을 묶어 전달하면 정상적으로 처리할 수 없다. 이렇게 던지면 [Object Object] 문자열만 전송된다 *

2022년 8월 22일
·
0개의 댓글
·

Spring MultipartFile <form> 방식의 파일 업로드

uploadForm.jsp 실제 전송될 경로인 action="uploadFormAction"**로 지정해주고, enctype속성값을 **"multipart/form-data"로 지정해주는게 중요합니다. input type="file"\>의 경우 최근 브라우저에서는 'multiple'로 지정해주면 여러 개의 파일을

2022년 7월 25일
·
0개의 댓글
·

[Spring] Multipart 요청 처리

폼으로 데이터를 전송할 때 파일도 함께 보낸다면 파일은 바이너리 데이터 전송이라 Content-type을 multipart/form-data로 지정 해주어야 한다. MultipartHttpServletRequest HttpServletRequest 객체 안에 포함된 파라미터 요청 중에서 File 데이터를 추출할 때에는 MultipartHttpServletRequest와 MultipartFile을 이용해서 추출할 수 있다. requestParam 요청 파라미터 타입 중 MultipartFile 타입에 해당하는 한 가지를 골라서 file 데이터를 다룰 수 있다. requestParam 형식 @RequestParam("가져올 데이터의 이름") 데이터 타입 "변수 이름 requestPart file 객체와 VO 객체를 한번에 받을 때 사용한다. 하나의 api에서 MediaType을 지정하여 Json과 MultipartFile을 한번에 전달 받을

2022년 7월 4일
·
0개의 댓글
·
post-thumbnail

Image 업로드(+Jpa, TestCode)

계기 게시판 기능에 이미지 업로드 기능을 추가하기 위해 연습 내가 생각한 요구 사항 : 여러 이미지를 올릴 수 있어야 함 데이터 저장을 위해 Jpa를 사용 이미지 저장은 서버에 저장하고, 후에 AWS S3로 변경 예정 ( 최소한의 변경 고려) 테스트 코드가 있었으면 좋겠음 ImageUpload Entity 처음에는 굳이 엔티티로 만들고 싶지 않았지만, 게시글과 다대일 관계를 가지는 점을 고려해서 엔티티로 만듬 multipartFile을 매개변수로 받는 정적 생성자 메서드를 통해 객체 생성 가능 UUID를 이용해서 이미지의 이름이 겹치지 않게 해줬다. (김영한님의 강의 코드에 ddd를 적용해서 녹여봤다... ) post 생애주기를 담당하는 서비스 이미지를 서버 내부에 저장하는 객체를 따로 만들 예정 (단일 책임 원칙 적용) ImageUpload 관련 단위 테스트 Imag

2022년 5월 7일
·
0개의 댓글
·

MultiPartFile (SpringBoot)

서버와 클라이언트의 이미지 전송은 어떤 식으로 할까? > @RequestPart MultipartFile multipartFile 이 한줄로 간단하게 해결 할 수 있다. 어떻게 하는지 자세하게 살펴보자! @PostMapping을 활용해서 클라이언트의 이미지 Request를 받아본다. @RequestParam으로는 프로필 사진을 저장할 멤버의 키값을 받아온다. Date는 일명이 겹치는것을 방지 하기 위해 파일명에 시간변수를 추가 하기 위해 선언했고 StringBuilder는 파일명 생성을 위해 선언했고 @Entity로 선언된 Member는 Entity를 업데이트 하기위해 선언했다. request된 파일의 존재여부를 확인하고 스트링빌더에 문자열을 추가한다. request된 파일이 존재한다면 파일을 생성한다. 그후 try ~ catch문을 선언하고 try문 안에 memberService를 호출해서 id를 인자로 넘겨주고 id에

2022년 4월 29일
·
0개의 댓글
·
post-thumbnail

[SpringBoot] KnockKnock 개발일지 - 0227 (게시글 작성 시 이미지 넣기- Server 개발)

오늘의 목표 > 게시글 작성 시 이미지 넣는 기능 추가하기 참고한 링크 >[AWS] Spring boot 에서 AWS S3 로 이미지 저장하기 [Spring] Spring Boot AWS S3 사진 업로드 하는 법 [Spring] 파일 및 이미지 업로드 [Spring] Json with MultipartFile 오늘의 이슈 > 이미지 데이터는 어떻게 처

2022년 2월 28일
·
0개의 댓글
·

[Java] MultipartFile null체크

기존 참고로 List imageFile 이다. 이미지 파일을 올려도, 안올려도 된다는 상황이면 null체크를 해야 불필요하게 AwsS3에 업로드 되는 것을 막을 수 있다. 하지만 저렇게 코드를 짜니 이미지 파일을 선택안했을 때 불필요한 값이 S3에 올라가는 것을 발견했다. 새로 알게된 사실은 MultipartFile은 null체크할 때 isEmpty()를 사용한다. List형식이기 때문에 반복문으로 List 내부의 이미지파일에 isEmpty()를 적용해야한다. 개선후

2022년 2월 10일
·
0개의 댓글
·
post-thumbnail

[SpringBoot][SpringDataJPA] 게시판 구현 (3)

yu-jin-song님의 게시판 구현 게시물을 참고하였습니다. MultipartFile > #### ✔️ 구현기능 게시글 작성 및 파일 업로드 동시 처리 다중 파일 업로드 DB에 파일 자체를 저장하지 않고 파일 관련 정보만 저장. 실제 파일은 서버 내 지정 경로에 저장 파일 용량 설정 의존성 주입 IOUtils 패키지는 대부분 static 메소드이기 때문에 객체를 생성하지 않고 바로 사용 가능하다. IOUtils 패키지 중 org.apache.commons.io.FileUtils를 사용해 파일 관련 처리를

2022년 1월 19일
·
0개의 댓글
·