在ReactJs中使用axios发送POST请求时,$ _FILES为空

时间:2020-06-26 23:42:51

标签: php reactjs axios

我有一个文件数组,我想在php中检索其他一些字符串参数,当我从React中的FormData发送文件时,它们在php中被作为json接收:

 "{"dataForm":{"Files":[{"path":"aust.jpeg"}]},"headers":{"content-type":"multipart/form-data"}}"

出于明显的原因,我想在$ _FILES中接收它们,是否有可能做到这一点,并将其余参数作为php中的json读取?而且我的php.ini已完全配置为允许文件上传

这是Reactjs代码:

import axios from 'axios';

  const sendMail = (data, uploadedFiles) => {
  const dataForm = new FormData();
  dataForm['Files'] = uploadedFiles; // Here uploadedFiles is an array of files
  console.log(dataForm['Files'])
  axios.post('http://localhost/bickdata/mail/SendMail.php', {
    dataForm,
    headers: {
      'content-type': 'multipart/form-data'
  }
  }) .then(function (response) {
    console.log(response);
  });
}

提前谢谢!

2 个答案:

答案 0 :(得分:2)

结果是axios.post()默认情况下以JSON格式发送所有数据,这就是为什么文件不被解释为php中的File对象的原因,我对发布请求做了一些小的更改,最后我收到了文件,这是更新的代码:

(我现在仅从阵列发送一个文件,但是我很确定这对于文件阵列是相同的过程)

  dataForm.append( 
    "potato", 
    uploadedFiles[0], 
    uploadedFiles[0].name 
  ); 

  axios({
    method: 'post',
    url: 'http://localhost/bickdata/mail/SendMail.php',
    data: dataForm,
    headers: {'Content-Type': 'multipart/form-data' }
    })
    .then(function (response) {
        //handle success
        console.log(response);
    })
    .catch(function (response) {
        //handle error
        console.log(response);
    });

答案 1 :(得分:1)

这是您在React中上传多个文件的方式

const dataForm = new FormData();
uploadedFiles.map(file => 
    dataForm.append("Files[]", file);
}