javascript - 上传文件,axios 工作,但 fetch API 没有,我做错了什么?
问题描述
我正在使用 fetch API 与服务器通信,然后我意识到当我使用 fetch API 上传文件时,发布请求看起来很奇怪,我的 PHP 服务器无法$_FILES
正确获取文件。
这是我的基本设置,file
和fileName
已预先填充。
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 的情况下实现这一点?
解决方案
尝试不带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/
推荐阅读
- git - Azure DevOps '401 - 哦,你没有访问权限' 受邀用户
- bash - 通过云 API 从命令行进行文本到语音转换
- macos - High Sierra 和 Homebrew 不适合 GPG
- python - 在 django 模型中创建伪造键列表
- amazon-web-services - 编写 Splunk 查询 - 来自 Cloudtrail 的初始访问密钥使用的唯一计数
- api - 使用 REST API 创建 Tableau 文件夹
- php - CodeIgniter 4:带有多个公共文件夹的火花
- jquery - 使用 Wordpress 自动完成 jQuery
- javascript - 根据另一个表单字段(单选按钮)预填充值 HTML 表单输入
- java - 运行时 Spring 启动 MySQLIntegrityConstraintViolationException