TIL 8: HTTP 메시지로 다중 파일 업로드하기
TL;DR
- 동일한 파라미터에 여러 번에 걸쳐 파일을 추가함으로써, 다중 파일을 업로드할 수 있다.
동일한 파라미터냐 배열 형태의 파라미터냐 그것이 문제로다.
매번 단일 파일 업로드만 구현하다가 이번에 다중 파일 업로드가 필요한 요구사항이 들어 왔다.
앱에는 이미 오픈 소스 라이브러리를 사용하지 않고, NSURLSessionTask
를 이용한 네트워크 처리가 되어 있었다.
그래서 기존 코드를 다 뒤집기 보다는 기존처럼 공식 프레임워크로 구현하려 했다.
직접 구현을 하게 되면, 파일 업로드를 위해 multipart/form-data
의 Content Type으로 API를 호출해야 한다.
그것을 위해 직접 HTTP
메시지의 Request Body를 구성해야 했고, 경험한 적이 있어서 어렵지 않게 기본적인 Body를 구성할 수 있었다.
처음에는 서버쪽에서 배열로 파일 목록을 받으니 특정한 패턴으로 파라미터를 구분해 파일을 담아야 하는줄 알았다.
실제로 구글링을 할 때도 files[0]
, files[1]
등과 같이 구분해 담으라는 답변이 있었다.
그럴듯해서 그대로 시도를 했으나 잘 안되어, 파라미터에 문제가 있지 않고 Body 구성에 실수가 있는줄 알고 그 부분만 계속 살펴 봤다.
결국 해결책은 매우 간단하게 동일한 파라미터에 차례대로 담으면 되는 것이었다. 🙄
파일이 아닌 다른 데이터도 서버에서 배열로 받는다면, 똑같이 동일한 파라미터에 데이터를 담으면 된다.
개인적으로 동일한 파라미터로 보내면, 순서를 어떻게 구분할까 싶었는데 그 원리는 생각보다 아주 단순해 보였다.
위에서부터 차례대로 읽으면서 인덱스가 쌓이는 구조로 보인다.
두 종류의 데이터를 같은 인덱스로 보내고 싶으면, 순서에 유의해서 데이터를 담아야 한다.
이렇게 직접 HTTP
메시지를 구성하며 구현하는 것도 재미는 있지만, 역시 신뢰도 높은 오픈 소스 라이브러리가 사용하기에 편하다. 😌
그래도 HTTP
메시지 구조를 모르고 오픈 소스 라이브러리를 사용하는 것과 알고 쓰는 것은 아주 다르니 꾸준히 공부해야겠다.