问题使用axios上传图像
我正在尝试使用带有react-native的axios将图像发送到服务器。
为此,我将图像数据(以64为基数的编码图像数据)直接传递给使用axios的uploadPicture
函数:
const uploadPicture = async (data): Promise<AxiosResponse<string>> => {
const response = publicApi.post(
`${API_URL}/upload`,
{
image: data,
},
{
headers: { 'Content-Type': 'multipart/form-data' },
transformRequest: [transformToFormData],
}
);
return response;
};
const transformToFormData: AxiosTransformer = data => {
const formData = new FormData();
for (const key in data) {
formData.append(key, data[key]);
}
return formData;
};
我面临的问题:
我收到内部错误,例如如果我的图像没有通过我的请求正确传输。
如果我使用Postman进行完全相同的请求,则可以像这样设置主体,效果很好:
这使我认为问题不是来自服务器,而是来自我的axios请求。
关于我可能做错了什么的任何想法?我在某处缺少任何axios选项吗?
回答如下:我使用javascript的
- fetch函数代替axios
- 我发送文件对象而不是直接发送数据
- 我必须禁用本地反应网络检查,否则上传将不起作用
image
是反应本机图像选择器的响应:const file = {
uri: image.uri,
name: image.fileName,
type: image.type,
size: image.fileSize,
slice: () => new Blob(),
};
const body = new FormData();
body.append('image', file);
const response = await fetch(`${API_URL}/upload`, {
method: 'POST',
body,
});
问题使用axios上传图像
我正在尝试使用带有react-native的axios将图像发送到服务器。
为此,我将图像数据(以64为基数的编码图像数据)直接传递给使用axios的uploadPicture
函数:
const uploadPicture = async (data): Promise<AxiosResponse<string>> => {
const response = publicApi.post(
`${API_URL}/upload`,
{
image: data,
},
{
headers: { 'Content-Type': 'multipart/form-data' },
transformRequest: [transformToFormData],
}
);
return response;
};
const transformToFormData: AxiosTransformer = data => {
const formData = new FormData();
for (const key in data) {
formData.append(key, data[key]);
}
return formData;
};
我面临的问题:
我收到内部错误,例如如果我的图像没有通过我的请求正确传输。
如果我使用Postman进行完全相同的请求,则可以像这样设置主体,效果很好:
这使我认为问题不是来自服务器,而是来自我的axios请求。
关于我可能做错了什么的任何想法?我在某处缺少任何axios选项吗?
回答如下:我使用javascript的
- fetch函数代替axios
- 我发送文件对象而不是直接发送数据
- 我必须禁用本地反应网络检查,否则上传将不起作用
image
是反应本机图像选择器的响应:const file = {
uri: image.uri,
name: image.fileName,
type: image.type,
size: image.fileSize,
slice: () => new Blob(),
};
const body = new FormData();
body.append('image', file);
const response = await fetch(`${API_URL}/upload`, {
method: 'POST',
body,
});