在axios中编写一个包含数据和文件的多部分(GraphQL)请求,可以按照以下步骤进行操作:
- 导入axios库和FormData库。
import axios from 'axios';
import FormData from 'form-data';
- 创建一个FormData对象,并添加GraphQL查询和变量。
const formData = new FormData();
formData.append('operations', JSON.stringify({ query: 'mutation ($file: Upload!) { uploadFile(file: $file) { filename } }', variables: { file: null } }));
formData.append('map', JSON.stringify({ '0': ['variables.file'] }));
- 添加要上传的文件到FormData对象中。
formData.append('0', file, file.name);
- 设置请求头,指定Content-Type为multipart/form-data。
const config = {
headers: {
'content-type': 'multipart/form-data',
},
};
- 发送POST请求,将FormData对象作为请求主体发送。
axios.post('/graphql', formData, config)
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
完整的示例代码如下:
import axios from 'axios';
import FormData from 'form-data';
const fileInput = document.getElementById('file-input');
const file = fileInput.files[0];
const formData = new FormData();
formData.append('operations', JSON.stringify({ query: 'mutation ($file: Upload!) { uploadFile(file: $file) { filename } }', variables: { file: null } }));
formData.append('map', JSON.stringify({ '0': ['variables.file'] }));
formData.append('0', file, file.name);
const config = {
headers: {
'content-type': 'multipart/form-data',
},
};
axios.post('/graphql', formData, config)
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
注意:在示例代码中,假设已经有一个文件输入字段(id为'file-input'),用户选择了一个文件并将其存储在变量file中。你需要根据你的实际情况修改代码。