【问题标题】:unable to send multipart/form-data to nodejs server无法将 multipart/form-data 发送到 nodejs 服务器
【发布时间】:2019-12-06 15:31:29
【问题描述】:

我正在尝试在我的 react 应用程序中发送 multipart/formdata。每次我使用 axios 访问 POST api 时,formdata 总是为空。我尝试转换为 JSON.stringify 和键值方法,但似乎没有任何效果。我确实将标题设置为'Content-Type': 'multipart/form-data'

postList = (e) => {
    e.preventDefault();


    var postParams;
    if(this.state.message && this.state.parent){

      postParams = {
        message: this.state.message,
        chat_m_id: this.state.parent,
        depth: (1).toString(),
        msg_icon: this.state.msg_icon.name
      }
    }
    else{    
      postParams = {
        message: this.state.message,
        chat_m_id: (0).toString(),
        depth: (0).toString(),
        msg_icon: this.state.msg_icon.name
      }
    }
    console.log(postParams);
    let bodyFormData = new FormData();

    //approach-one
      bodyFormData.append('data',postParams);

    //approach-one
      // bodyFormData.append('data',JSON.stringify(postParams));

    //approach-three
      // for (let [key, value] of Object.entries(postParams)) {
      //     bodyFormData.append(`'${key}'`, JSON.stringify(`${value}`));
      // }

console.log(bodyFormData) //this is always empty


    axios.post(GlobalVar.BASE_URL+'api/msgtemplate/create', bodyFormData, {headers: GlobalVar.headersFormData})
    .then(res => {
      console.log(res)
      this.props.history.push('/messages')
    })
    .catch(err => console.log(err.res));

  }

我已经花了几个小时,请帮助解决它。

【问题讨论】:

    标签: reactjs axios


    【解决方案1】:

    下面是一个用 axios 发送文件的例子:

    在你的情况下,我在这里调试了你的代码:https://codesandbox.io/s/react-example-ypnbv?fontsize=14&hidenavigation=1&theme=dark

    state = { selectedFile: null }
    //handler for file change event
    fileChangedHandler = event => {
      this.setState({ selectedFile: event.target.files[0] })
    }
    
      uploadHandler = () => {
        const formData = new FormData()
        formData.append(
          'myFile',
          this.state.selectedFile,
          this.state.selectedFile.name
        )
        axios.post('my-domain.com/file-upload', formData)
      }
    

    【讨论】:

    • 我正在遵循类似的方法。如果你能帮助调试我的代码?
    • 这是假人codesandbox.io/s/…
    • @bubble-cord 你不能在同一个后端 api 上传文件和名字和姓氏,文件必须是不同的 api,然后在不同的 api 中发送第一个姓氏,我已经编辑了代码框来上传文件,如果你要上传名称,请制作另一个按钮
    猜你喜欢
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2019-01-06
    • 2020-10-06
    相关资源
    最近更新 更多