File Uploads
Villus has support for file uploads but it is not configured out of the box, So you would need to manually import it and configure it with villus client.
The multipart plugin is available as its own package under the name @villus/multipart
Basic File Upload
First, add the plugin to your dependencies using yarn or npm:
bashyarn add @villus/multipart
# Or
npm install @villus/multipartThen import the multipart plugin from villus and make sure it is before the fetch plugin:
vue<script setup>
import { useClient, fetch } from 'villus';
import { multipart } from '@villus/multipart';
useClient({
url: 'https://test.com/graphql',
use: [multipart(), fetch()],
});
</script>And that’s it, Now you can use files in your queries/mutations:
vue<template>
<div>
<input type="file" name="upload" id="" @change="upload" />
</div>
</template>
<script setup>
import { useClient, useMutation, fetch } from 'villus';
import { multipart } from '@villus/multipart';
useClient({
url: 'http://localhost:9000/graphql',
use: [multipart(), fetch()],
});
const SingleUpload = `
mutation SingleUpload ($file: Upload!) {
singleUpload(file: $file) {
id
path
mimetype
filename
}
}
`;
const { execute } = useMutation(SingleUpload);
async function upload(e) {
const { data, error } = await execute({
file: e.target.files[0],
});
console.log(data, error);
}
</script>danger
Note that the multipart plugin currently is not supported by the batch plugin, you can only use it with fetch
and your custom fetchers if applicable.
Options
At this moment the multipart plugin doesn’t have any options to customize
Code
You can check the source code for the multipart plugin and use it as a reference to build your own