# graphql 파일 업로드 API 구현시 문제점 ###### tags: `trouble shooting` ### file에서 읽어온 createReadStream 문제 ``` const { createReadStream, filename } = await file; const stream = createReadStream(); ``` - 파일에서 읽어온 createReadStream을 생성하는 순간 Maximum call stack size exceeded 오류 발생 ![](https://i.imgur.com/RIwSkuM.png) ### 시도 방법 1 - graphql-upload를 사용하여 graphqlUploadExpress를 미들웨어로 추가하는 방법 - 그러나 postman으로 요청을 보냈을 때, `Missing multipart field operations` 라는 메시지 반환 - postMan을 통해 요청을 보낼때 operactions 필드를 함께 보냈지만 계속 Missing field라는 응답을 보냈다. ![](https://i.imgur.com/YbVTDWb.png) - github에서 curl로 요청하는 코드를 그대로 보내보아도 똑같은 에러 응답을 받았다 ``` curl localhost:3000/graphql \ -F operations='{ "query": "mutation ($file: Upload!) { uploadImage(file: $file) { id } }", "variables": { "file": null } }' \ -F map='{ "0": ["variables.file"] }' \ -F 0=@a.txt ``` - 해결 실패... ### 시도방법 2 - Node의 버전을 12버전으로 다운그레이드 하는 방법 - 검색해 본 결과 노드 상위 버전에서는 동작하지 않는다는 글 발견 [링크](https://github.com/jaydenseric/graphql-upload/issues/170) - nvm을 통해 node의 버전을 관리하기로 했다. [nvm으로 node버전 관리 방법](https://gist.github.com/falsy/8aa42ae311a9adb50e2ca7d8702c9af1) - node 버전을 12버전으로 낮추고 난 다음에 정상적으로 작동 ### 여러개의 이미지를 업로드 하기 위해 [graphql 공식문서](https://www.apollographql.com/docs/apollo-server/data/file-uploads/) - 하나의 파일을 업로드 하는 방법이 나온다. - Upload 대신 배열을 입력받아, map로 각 요소마다 하나의파일을 업로드 하는 방법을 사용해서 해결하였다. ### 추후 논의 사항 - 받아온 파일을 aws s3 같은 외부 서버에 저장을 할지, 아니면 현재 프로젝트에 저장을 할지는 이야기 해보아야 할 것 같다. - 현재는 현재 프로젝트 내에 파일을 저장하는 방식을 사용하였다.