繁体   English   中英

使用未发送到正文的文件上传来反应js fetch api

[英]react js fetch api using file upload not being sent to body

这是我的代码

   let formData = new FormData(); 
     
      // Update the formData object 
      formData.append( 
        "myFile", 
        this.state.product_picture, 
        this.state.product_picture.name 
      ); 
      var options = { content: formData };
        const token =  JSON.parse(localStorage.getItem('token'));
        const requestOptions = {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
              },
              body: JSON.stringify({
                product_name:this.state.product_name,
                product_description:this.state.product_description,
                product_picture:formData,
                category_name:this.state.category_choosen,
              })
        };
        fetch('http://cms.test/api/products/insert_supplier_product?token='+token, requestOptions)
            .then(response => response.json())
            .then(data => {
                this.setState({ product: data.product})
            })
            .catch(error =>{
                console.log("Product creation error", error);
            });

我有这个 fetch api 它总是给出 422 响应我认为正在发生的事情是它没有读取文件,因为我想上传一个文件,它在邮递员中都可以工作,但是当使用 react 时它崩溃了这里的主体是状态内部的问题有一些字符串但是在 this.state.product_picture 里面有一个文件

希望有人能帮忙! 谢谢!

解决方案:使用 axios 调用 api 解决了我的问题

您不能在请求中发送 JSON 对象中的文件(至少在没有 Base64 编码的情况下不能)。 按以下方式更改代码以发送带有表单的文件。

    let formData = new FormData(); 
 
   // Update the formData object 
   formData.append( 
    "myFile", 
    this.state.product_picture, 
    this.state.product_picture.name 
    ); 

   formData.append("product_name",this.state.product_name);
   formData.append("product_description",this.state.product_description);
   formData.append("category_name",this.state.category_choosen);

   var options = { content: formData };
    const token =  JSON.parse(localStorage.getItem('token'));
    const requestOptions = {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'multipart/form-data',
          },
          body: formData
    };
    fetch('http://cms.test/api/products/insert_supplier_product?token='+token, requestOptions)
        .then(response => response.json())
        .then(data => {
            this.setState({ product: data.product})
        })
        .catch(error =>{
            console.log("Product creation error", error);
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM