iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 20
0
Data Technology

GraphQL + ApolloData 入門系列 第 20

ApolloData & Upload套件 ClientPart

介紹

ApolloData的Client 的Upload套件,也是同一個作者開發的連結在最底下 apollo-upload-client

安裝

npm install apollo-upload-client apollo-link graphql

程式碼

import { createUploadLink } from 'apollo-upload-client'

const link = createUploadLink(/* Options */)

Options選項

includeExtensions (boolean): 切換發送extensions set 到GraphQL服務器 (default: false).
uri (string): GraphQL endpoint URI (default: /graphql).
credentials (string): 覆蓋 fetchOptions.credentials.
headers (object): 合併和覆蓋 fetchOptions.headers.
fetchOptions (object): fetch init; 上傳時要求被覆蓋.
fetch (function): Fetch API to use (default: Global fetch).

單一檔案上傳 要把target.files[0] 加上[0]


import gql from 'graphql-tag'
import { graphql } from 'react-apollo'

export default graphql(gql`
  mutation($file: Upload!) {
    uploadFile(file: $file) {
      id
    }
  }
`)(({ mutate }) => (
  <input
    type="file"
    required
    onChange={({ target }) =>
      target.validity.valid && mutate({ variables: { file: target.files[0] } })
    }
  />
))

多個檔案上傳 多了input multiple target.files不需要使用 index ,gql的定義 形態要定義[Upload!]!
意思是上傳的型態是陣列!的意思是非必要

import gql from 'graphql-tag'
import { graphql } from 'react-apollo'

export default graphql(gql`
  mutation($files: [Upload!]!) {
    uploadFiles(files: $files) {
      id
    }
  }
`)(({ mutate }) => (
  <input
    type="file"
    multiple
    required
    onChange={({ target }) =>
      target.validity.valid && mutate({ variables: { files: target.files } })
    }
  />
))

React Native 的部分,包得更方便使用 單一檔案使用ReactNativeFile 多個檔案使用ReactNativeFile.list(形態陣列) 這樣就好了,前端的部分就這樣就完成了


import { ReactNativeFile } from 'apollo-upload-client'

const file = new ReactNativeFile({
  uri: '…',
  type: 'image/jpeg',
  name: 'photo.jpg'
})

const files = ReactNativeFile.list([
  {
    uri: '…',
    type: 'image/jpeg',
    name: 'photo-1.jpg'
  },
  {
    uri: '…',
    type: 'image/jpeg',
    name: 'photo-2.jpg'
  }
])

總結

這個套件前端的部分也是寫少少的code,這邊要注意options的uri跟apollodataClient的 graphql預設值都是/graphql但如果 apolloClient預設值有更改 這邊的 uri也要改一下要mapping

https://github.com/jaydenseric/apollo-upload-client


上一篇
ApolloGraphql & Upload套件 ServerPart(三)
下一篇
ApolloData & TypeScript (一)
系列文
GraphQL + ApolloData 入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言