TIL 8: HTTP 메시지로 다중 파일 업로드하기

TL;DR

  • 동일한 파라미터에 여러 번에 걸쳐 파일을 추가함으로써, 다중 파일을 업로드할 수 있다.

동일한 파라미터냐 배열 형태의 파라미터냐 그것이 문제로다.

매번 단일 파일 업로드만 구현하다가 이번에 다중 파일 업로드가 필요한 요구사항이 들어 왔다.
앱에는 이미 오픈 소스 라이브러리를 사용하지 않고, NSURLSessionTask를 이용한 네트워크 처리가 되어 있었다. 그래서 기존 코드를 다 뒤집기 보다는 기존처럼 공식 프레임워크로 구현하려 했다.

직접 구현을 하게 되면, 파일 업로드를 위해 multipart/form-data의 Content Type으로 API를 호출해야 한다. 그것을 위해 직접 HTTP 메시지의 Request Body를 구성해야 했고, 경험한 적이 있어서 어렵지 않게 기본적인 Body를 구성할 수 있었다.

처음에는 서버쪽에서 배열로 파일 목록을 받으니 특정한 패턴으로 파라미터를 구분해 파일을 담아야 하는줄 알았다. 실제로 구글링을 할 때도 files[0], files[1] 등과 같이 구분해 담으라는 답변이 있었다. 그럴듯해서 그대로 시도를 했으나 잘 안되어, 파라미터에 문제가 있지 않고 Body 구성에 실수가 있는줄 알고 그 부분만 계속 살펴 봤다.

결국 해결책은 매우 간단하게 동일한 파라미터에 차례대로 담으면 되는 것이었다. 🙄
파일이 아닌 다른 데이터도 서버에서 배열로 받는다면, 똑같이 동일한 파라미터에 데이터를 담으면 된다.

개인적으로 동일한 파라미터로 보내면, 순서를 어떻게 구분할까 싶었는데 그 원리는 생각보다 아주 단순해 보였다. 위에서부터 차례대로 읽으면서 인덱스가 쌓이는 구조로 보인다.
두 종류의 데이터를 같은 인덱스로 보내고 싶으면, 순서에 유의해서 데이터를 담아야 한다.

이렇게 직접 HTTP 메시지를 구성하며 구현하는 것도 재미는 있지만, 역시 신뢰도 높은 오픈 소스 라이브러리가 사용하기에 편하다. 😌
그래도 HTTP 메시지 구조를 모르고 오픈 소스 라이브러리를 사용하는 것과 알고 쓰는 것은 아주 다르니 꾸준히 공부해야겠다.

TIL 9: 안드로이드 커스텀 스타일 적용하기 TIL 7: MRC 속 ARC 조심하기