首页 > 解决方案 > 上传文件,axios 工作,但 fetch API 没有,我做错了什么?

问题描述

我正在使用 fetch API 与服务器通信,然后我意识到当我使用 fetch API 上传文件时,发布请求看起来很奇怪,我的 PHP 服务器无法$_FILES正确获取文件。

这是我的基本设置,filefileName已预先填充。

const api = 'xxxx/api/file';
const body = new FormData();
body.append('files[]', file, fileName);
body.append('bid', 529);

const headers = { 
  'Content-Type': 'multipart/form-data', 
  'Authorization': 'Token xxxxxx'
};

当我使用 fetch API 时,发布请求看起来像这样,我的任何 PHP 服务器都无法获取发布数据。

fetch(api, { method: 'POST', body, headers, mode: 'cors' });

在此处输入图像描述


但是当我使用 axios 时,请求看起来像这样,并且我的 PHP 服务器可以正确获取文件:

axios.post(api, body, { headers });

在此处输入图像描述


那么发生了什么?axios 做了什么不同的事情吗?

有没有办法在不使用 axios 的情况下实现这一点?

标签: javascriptphpaxiosfetch-api

解决方案


尝试不带content-Type密钥的 fetch API:

const api = 'xxxx/api/file';
const body = new FormData();
body.append('files[]', file, fileName);
body.append('bid', 529);

const headers = { 
  'Authorization': 'Token xxxxxx'
};

delete headers.headers['Content-Type'];

fetch(api, { method: 'POST', body, headers, mode: 'cors' });

来源:https ://muffinman.io/blog/uploading-files-using-fetch-multipart-form-data/


推荐阅读