인프런 커뮤니티 질문&답변

맥북유저님의 프로필 이미지

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

retrofit multipartfile 리스트 보내기

24.06.05 00:12 작성

·

163

·

수정됨

0


  @POST('/boards')
  @Headers({'Authorization': 'true'})
  @MultiPart()
  Future<HttpResponse> createBoard({
    @Part() required BoardRequestModel boardCreateModel,
    @Part() List<MultipartFile>? files,
  });

이렇게 multipartfile 리스트로 이미지를 보내려고 하는데

생성된 g.dart 파일을 보면 이렇게 에러가 발생합니다
스크린샷 2024-06-05 오전 12.10.34.png

현재 getx 에서 Multipartfile을 hide 해주고 사용했습니다

스크린샷 2024-06-05 오전 12.11.18.png

혹시 retrofit을 이용할때 multipartfile 리스트를 보내는 방법이 따로 있을까요?

답변 2

0

맥북유저님의 프로필 이미지
맥북유저
질문자

2024. 06. 07. 23:55

getx 사용하시는 분들

 

  @POST('/boards')
  @Headers({'Authorization': 'true', 'Content-Type': 'multipart/form-data'})
  @MultiPart()
  Future<HttpResponse> createBoard({
    @Part(name: 'boardRequestOnlyJson') required Map<String, dynamic> boardRequestOnlyJson,
    @Part() List<MultipartFile>? files,
  });

이렇게 multipartfile list와 json을 함께 보내려 @part를 썼지만

 

image

파일 생성 시에 에러가 발생했

습니다.

 

getx에 있는 multipartfile을 hide 해주셔야 합니다..

 

hide Headers 처럼 MultipartFile 또한 dio와 getx 겹치는 문제입니다.

 

이후에는 getx의 MultipartFile를 hide 해주면 이후 retrofit의 g.dart 파일 자체는 생성 되지만

생성된 g.dart파일 Formdata 부분에서 에러가 발생합니다

 

@part로 json을 formdata로 보내기 위해 retrofit에서 작성한 코드입니다.

formdata(); 에 밑줄이 있는데

image

이 문제도 getx와 dio에서 formdata가 겹치기 때문에 발생합니다.

 

image결론은 multipartfile, formdata를 getx에서 hide 해주면 됩니다.

 

강사님 두서없이 질문한점 죄송합니더

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

2024. 06. 10. 11:22

안녕하세요!

이번에도 에러 메세지를 첨부 안해주셨는데 항상 질문할때는 에러 메세지를 첨부해주셔야합니다.

예를들어 보험사에 "사고가 났어요!"라고 얘기하면 보험사에서 보험료 처리를 할 수가 없습니다.

예를들면 "1차로에서 주행중인데 2차로 차량이 1차로로 차선을 변경하다 제 차의 뒷 범퍼를 박았어요" 이런식으로 전달해야겠죠?

어떤상황에 어떻게 에러가 났는지 "문맥"을 알 수 있어야 업무 처리가 가능합니다.

"에러가 났어요!"라고 하시는건 "사고가 났어요!"라고 말씀하시는것과 같습니다.

사고가 난건 알겠지만 제가 도움을 드리려면 "어떤 에러"가 났는지 저한테 정확히 말씀을 해주셔야합니다.

만약에 에러를 복붙만 해주셨다면 제가 첫 답변부터 쉽게 해결 해드릴 수 있었을 것입니다.

추가로, 수강생 본인도 항상 "빨간줄이다 비상!" 이라는 태도를 갖는게 아니라 빨간줄이 생겼다면 어떤 문제가 있는지 에러 메세지를 꼼꼼히 읽고 정확한 문제를 파악하는 훈련을 하셔야합니다.

그게 성장하는 유일한 방법입니다.

감사합니다!

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

2024. 06. 05. 13:01

안녕하세요!

boardCreateModel에서만 에러가 나는걸보니 딱히 "Multipart를 어떻게 보내나요?"의 문제는 아닌 것 같습니다. files는 잘 들어가니까요.

에러 메세지 확인 해보셨나요? 메세지에 답이 있을 것 같습니다.

감사합니다!

맥북유저님의 프로필 이미지
맥북유저
질문자

2024. 06. 05. 13:18

  @POST('/boards')
  @Headers({'Authorization': 'true', 'Content-Type': 'multipart/form-data'})
  @MultiPart()
  Future<dynamic> createBoard({
    @Part() Map<String, dynamic> boardRequestOnlyJson,
    @Part() List<File>? files,
  });

 

@part를 json와 파일 두개로 g.dart 파일을 만들면 계속 생성 시에 에러가 납니다..

@part를 두개로 써서 보내는게 맞는거 같은데 왜이럴까요

image

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

2024. 06. 07. 09:48

다시 말씀드리지만 에러 메세지가 중요합니다. "에러가 납니다"는 아무런 힌트가 되지 않습니다.

감사합니다!