如何使用 JS fetch API Post表单数据和上传文件

回答 2 浏览 1.4万 2020-04-10

我正在尝试使用JS fetch API发布表单数据,我也成功地发送了数据并得到了响应,但在文件上传中得到了一个错误,我的文件没有被上传,也没有被存储到数据库中的文件名。

<form id="signup">
    <label for="myName">Send me your name:</label>
    <input type="text" id="myName" name="name" value="abc">
    <br>
    <label for="userId">your id:</label>
    <input type="text" id="userId" name="id" value="123">
    <br>
    <label for="pic">your photo:</label>
    <input id="profile" name="profile" id="profile" type="file">
    <br>
    <input id="postSubmit" type="submit" value="Send Me!">
</form>

和javascript代码

const thisForm = document.getElementById('signup');
    const profile = document.getElementById('profile');
    thisForm.addEventListener('submit', async function (e) {
    e.preventDefault();
    const formData = new FormData(thisForm).entries()
    formdata.append("profile",profile.files[0]);
        const response = await fetch('<?php echo base_url() . 'api/get_subscription' ?>', {
            method: 'POST',
            headers: { 'Content-Type': 'multipart/form-data' },
            body: JSON.stringify(Object.fromEntries(formData))
        });

        const result = await response.json();
        console.log(result);
Tejaswee 提问于2020-04-10
如果你覆盖了默认提交,你应该通过FileReader API获得文件内容。我将尽快写一个答案,同时尝试阅读该APIGiuliano Collacchioni 2020-04-10
张贴你在上传时得到的错误信息。JonC 2020-04-10
2 个回答
#1楼 已采纳
得票数 5

不需要转换为JSON,也不需要在FormData上使用entries()。还要检查一下拼写,你写的是formdata,与formData不同。

const thisForm = document.getElementById('signup');
var formData = new FormData(thisForm);
const profile = document.getElementById('profile');
formData.append("profile", profile.files[0]);
const response = await fetch('<?php echo base_url() . 'api/get_subscription' ?>', {
  method: 'POST',
//  headers: { 'Content-Type': 'multipart/form-data' },
  body: formData
});
ariel 提问于2020-04-10
它在工作,但如果不使用JSON,我就能收集到全部的数据,但当我把它发送到我的php api时,它就会存储为空白的值。Tejaswee 2020-04-11
#2楼
得票数 1

对于文件的上传,你需要Content-type multipart/form-data。或者直接省略Content-type,因为你的浏览器可能会自动设置这个。

Jeroenouw 提问于2020-04-10
现在我在控制台得到的日志 { "name": "Abc", "id": "123", "profile" 。{}, }Tejaswee 2020-04-10