apollo-upload-client-with-persisted-queries
A terminating Apollo Link for Apollo Client that allows FileList, File, Blob or ReactNativeFile instances within query or mutation variables and sends GraphQL multipart requests.
apollo-upload-client
A terminating Apollo Link for Apollo Client that allows FileList
, File
, Blob
or ReactNativeFile
instances within query or mutation variables and sends GraphQL multipart requests.
Setup
Install with npm:
npm install apollo-upload-client
Apollo Boost doesn’t allow link customization; if you are using it migrate to a manual Apollo Client setup.
Apollo Client can only have 1 “terminating” Apollo Link that sends the GraphQL requests; if one such as apollo-link-http
is already setup, remove it.
Initialize the client with a terminating link using createUploadLink
.
Also ensure the GraphQL server implements the GraphQL multipart request spec and that uploads are handled correctly in resolvers.
Usage
Use FileList
, File
, Blob
or ReactNativeFile
instances anywhere within query or mutation variables to send a GraphQL multipart request.
See also the example API and client.
FileList
const gql = const Mutation = const UploadFiles = <Mutation = > <input ="file" = /> </Mutation>
File
const gql = const Mutation = const UploadFile = <Mutation = > <input ="file" = /> </Mutation>
Blob
const gql = // Apollo Client instance.const client = const file = 'Foo.' type: 'text/plain' // Optional, defaults to `blob`.filename = 'bar.txt' client
Support
- Node.js v6+
- Browsers
> 0.5%, not dead
- React Native
API
Table of contents
class ReactNativeFile
Used to mark a React Native File
substitute. It’s too risky to assume all objects with uri
, type
and name
properties are files to extract. Re-exported from extract-files
for convenience.
Parameter | Type | Description |
---|---|---|
file |
ReactNativeFileSubstitute | A React Native File substitute. |
Examples
A React Native file that can be used in query or mutation variables.
const ReactNativeFile =const file =uri: uriFromCameraRollname: 'a.jpg'type: 'image/jpeg'
function createUploadLink
Creates a terminating Apollo Link capable of file uploads. Options match createHttpLink
.
Parameter | Type | Description |
---|---|---|
options |
Object | Options. |
options.uri |
string? = /graphql |
GraphQL endpoint URI. |
options.fetch |
function? | fetch implementation to use, defaulting to the fetch global. |
options.fetchOptions |
FetchOptions? | fetch options; overridden by upload requirements. |
options.credentials |
string? | Overrides options.fetchOptions.credentials . |
options.headers |
Object? | Merges with and overrides options.fetchOptions.headers . |
options.includeExtensions |
boolean? = false |
Toggles sending extensions fields to the GraphQL server. |
Returns: ApolloLink — A terminating Apollo Link capable of file uploads.
See
Examples
A basic Apollo Client setup.
const ApolloClient =const InMemoryCache =const createUploadLink =const client =cache:link:
type FetchOptions
GraphQL request fetch
options.
Type: Object
Property | Type | Description |
---|---|---|
headers |
Object | HTTP request headers. |
credentials |
string? | Authentication credentials mode. |
See
type ReactNativeFileSubstitute
A React Native File
substitute.
Be aware that inspecting network requests with Chrome dev tools interferes with the React Native FormData
implementation, causing network errors.
Type: Object
Property | Type | Description |
---|---|---|
uri |
String | Filesystem path. |
name |
String? | File name. |
type |
String? | File content type. Some environments (particularly Android) require a valid MIME type; Expo ImageResult.type is unreliable as it can be just image . |
See
Examples
A camera roll file.
uri: uriFromCameraRollname: 'a.jpg'type: 'image/jpeg'