github.com/maeglindeveloper/gqlgen@v0.13.1-0.20210413081235-57808b12a0a0/example/fileupload/readme.md (about) 1 ### fileupload example 2 3 This server demonstrates how to handle file upload 4 5 to run this server 6 ```bash 7 go run ./example/fileupload/server/server.go 8 ``` 9 10 and open http://localhost:8087 in your browser 11 12 13 ### Single file 14 15 #### Operations 16 17 ``` 18 { 19 query: ` 20 mutation($file: Upload!) { 21 singleUpload(file: $file) { 22 id 23 } 24 } 25 `, 26 variables: { 27 file: File // a.txt 28 } 29 } 30 ``` 31 32 #### cURL request 33 34 ```shell 35 curl localhost:8087/query \ 36 -F operations='{ "query": "mutation ($file: Upload!) { singleUpload(file: $file) { id, name, content } }", "variables": { "file": null } }' \ 37 -F map='{ "0": ["variables.file"] }' \ 38 -F 0=@./example/fileupload./testfiles/a.txt 39 ``` 40 41 #### Request payload 42 43 ``` 44 --------------------------e6b2b29561e71173 45 Content-Disposition: form-data; name="operations" 46 47 { "query": "mutation ($file: Upload!) { singleUpload(file: $file) { id, name, content } }", "variables": { "file": null } } 48 --------------------------e6b2b29561e71173 49 Content-Disposition: form-data; name="map" 50 51 { "0": ["variables.file"] } 52 --------------------------e6b2b29561e71173 53 Content-Disposition: form-data; name="0"; filename="a.txt" 54 Content-Type: text/plain 55 56 Alpha file content. 57 --------------------------e6b2b29561e71173-- 58 ``` 59 60 ### Single file with payload 61 62 #### Operations 63 64 ``` 65 { 66 query: ` 67 mutation($file: Upload!) { 68 singleUpload(file: $file) { 69 id 70 } 71 } 72 `, 73 variables: { 74 file: File // a.txt 75 } 76 } 77 ``` 78 79 #### cURL request 80 81 ```shell 82 curl localhost:8087/query \ 83 -F operations='{ "query": "mutation ($req: UploadFile!) { singleUploadWithPayload(req: $req) { id, name, content } }", "variables": { "req": {"file": null, "id": 1 } } }' \ 84 -F map='{ "0": ["variables.req.file"] }' \ 85 -F 0=@./example/fileupload/testfiles/a.txt 86 ``` 87 88 #### Request payload 89 90 ``` 91 --------------------------38752760889d14aa 92 Content-Disposition: form-data; name="operations" 93 94 { "query": "mutation ($req: UploadFile!) { singleUploadWithPayload(req: $req) { id, name, content } }", "variables": { "req": {"file": null, "id": 1 } } } 95 --------------------------38752760889d14aa 96 Content-Disposition: form-data; name="map" 97 98 { "0": ["variables.req.file"] } 99 --------------------------38752760889d14aa 100 Content-Disposition: form-data; name="0"; filename="a.txt" 101 Content-Type: text/plain 102 103 Alpha file content. 104 --------------------------38752760889d14aa-- 105 ``` 106 107 108 ### File list 109 110 #### Operations 111 112 ``` 113 { 114 query: ` 115 mutation($files: [Upload!]!) { 116 multipleUpload(files: $files) { 117 id 118 } 119 } 120 `, 121 variables: { 122 files: [ 123 File, // b.txt 124 File // c.txt 125 ] 126 } 127 } 128 ``` 129 130 #### cURL request 131 132 ``` 133 curl localhost:8087/query \ 134 -F operations='{ "query": "mutation($files: [Upload!]!) { multipleUpload(files: $files) { id, name, content } }", "variables": { "files": [null, null] } }' \ 135 -F map='{ "0": ["variables.files.0"], "1": ["variables.files.1"] }' \ 136 -F 0=@./example/fileupload/testfiles/b.txt \ 137 -F 1=@./example/fileupload/testfiles/c.txt 138 ``` 139 140 #### Request payload 141 142 ``` 143 --------------------------d7aca2a93c3655e0 144 Content-Disposition: form-data; name="operations" 145 146 { "query": "mutation($files: [Upload!]!) { multipleUpload(files: $files) { id, name, content } }", "variables": { "files": [null, null] } } 147 --------------------------d7aca2a93c3655e0 148 Content-Disposition: form-data; name="map" 149 150 { "0": ["variables.files.0"], "1": ["variables.files.1"] } 151 --------------------------d7aca2a93c3655e0 152 Content-Disposition: form-data; name="0"; filename="b.txt" 153 Content-Type: text/plain 154 155 Bravo file content. 156 --------------------------d7aca2a93c3655e0 157 Content-Disposition: form-data; name="1"; filename="c.txt" 158 Content-Type: text/plain 159 160 Charlie file content. 161 --------------------------d7aca2a93c3655e0-- 162 ``` 163 164 165 166 ### File list with payload 167 168 #### Operations 169 170 ``` 171 { 172 query: ` 173 mutation($req: [UploadFile!]!) 174 multipleUploadWithPayload(req: $req) { 175 id, 176 name, 177 content 178 } 179 } 180 `, 181 variables: { 182 req: [ 183 { 184 id: 1, 185 File, // b.txt 186 }, 187 { 188 id: 2, 189 File, // c.txt 190 } 191 ] 192 } 193 } 194 ``` 195 196 #### cURL request 197 198 ``` 199 curl localhost:8087/query \ 200 -F operations='{ "query": "mutation($req: [UploadFile!]!) { multipleUploadWithPayload(req: $req) { id, name, content } }", "variables": { "req": [ { "id": 1, "file": null }, { "id": 2, "file": null } ] } }' \ 201 -F map='{ "0": ["variables.req.0.file"], "1": ["variables.req.1.file"] }' \ 202 -F 0=@./example/fileupload/testfiles/b.txt \ 203 -F 1=@./example/fileupload/testfiles/c.txt 204 ``` 205 206 #### Request payload 207 208 ``` 209 --------------------------65aab09fb49ee66f 210 Content-Disposition: form-data; name="operations" 211 212 { "query": "mutation($req: [UploadFile!]!) { multipleUploadWithPayload(req: $req) { id, name, content } }", "variables": { "req": [ { "id": 1, "file": null }, { "id": 2, "file": null } ] } } 213 --------------------------65aab09fb49ee66f 214 Content-Disposition: form-data; name="map" 215 216 { "0": ["variables.req.0.file"], "1": ["variables.req.1.file"] } 217 --------------------------65aab09fb49ee66f 218 Content-Disposition: form-data; name="0"; filename="b.txt" 219 Content-Type: text/plain 220 221 Bravo file content. 222 --------------------------65aab09fb49ee66f 223 Content-Disposition: form-data; name="1"; filename="c.txt" 224 Content-Type: text/plain 225 226 Charlie file content. 227 --------------------------65aab09fb49ee66f-- 228 ``` 229