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