Flutter와 AWS S3: Dio를 활용한 파일 업로드 문제 해결
Flutter에서 AWS SDK가 아직 제공되지 않기 때문에, 때때로 presigned URL을 활용하여 S3에 파일을 업로드해야 하는 경우가 있습니다. 이 글에서는 presigned URL 생성 방법은 생략하고, Flutter에서 dio를 사용하여 어떻게 파일을 업로드하는지 설명하겠습니다.
Dio 설정과 테스트
Dio 공식 문서에는 binary를 활용한 파일 업로드 가이드가 있어서 다음과 같이 dio를 설정할 수 있습니다:
저는 이렇게 설정한 후 테스트만 해 두었고, 얼마 전 실제로 사용해야 할 일이 생겨 다시 테스트해 보았습니다. 그런데 예상치 못하게 동작했습니다. 업로드는 되는 것 같았지만, URL로 접속해 보면 알 수 없는 문자들만 나타났습니다:
문제의 원인 및 해결
잘 동작하던 코드가 갑자기 안 되니 당황스러웠지만, 인코딩 문제일 것 같아 headers에 charset이나 content-type 등을 추가해 보았으나 여전히 동작하지 않았습니다.
워낙 Flutter 자료가 부족하고 특히 S3 관련해서 더 적어서 구글링으로도 해결 방법을 찾기 어려웠습니다.
결론부터 말하면 문제의 원인은 content-type을 지정하지 않아서였습니다. dio에서는 content-type을 header에 정의할 수 있지만, 이 경우에는 동작하지 않았습니다. content-type은 header가 아닌 다음과 같이 지정해주어야 잘 동작했습니다:
0 개의 댓글:
Post a Comment