Почему загруженный файл изображения отображается пустым при отправке формы? React js

#javascript #reactjs #axios

#javascript #reactjs #axios

Вопрос:

Я пытаюсь загрузить изображение в react js и django api с использованием axios, но когда я загружаю изображение, оно показывает файл {} , подобный этому, в запросе. Я просто хочу загрузить изображение с категорией, когда я выбираю категорию, она отображается только в файле запроса {} , я много пробовал, но это не сработало, поэтому, пожалуйста, подскажите мне, как заставить это работать. и у меня есть вот такой вот код, который я пробовал. Спасибо

 import React, { Component } from "react";
import { Helmet } from "react-helmet";
import { withTranslation } from "react-i18next";
import config from "../../Main";
import arrow_left from "../../../img/Aarrow.png";
import Swal from "sweetalert2";
import axios from "axios";

let authToken = localStorage.getItem("Token");
class EditCar extends Component {
  constructor(props) {
    super(props);
    this.state = {
    
     
     
      car_photo: [
        {
          category: "",
          sub_category: "",
          file: null,
        },
      ]
      
    };
 
    this.handleSubmit = this.handleSubmit.bind(this);
    this.handleImage = this.handleImage.bind(this)

  }

  handleSubmit(e) {
    e.preventDefault();

  

    const data = {
     
      car_photo: [
        ...this.state.car_photo.map((c) => ({
          category: c.category,
          sub_category: c.sub_category,
          file: c.file,
        })),
      ],
    };

    axios({
      method: "PUT",
      url: `${config.apiUrl.car}${this.props.match.params.pk}/profile/`,
      headers: {
        Accept: "application/json, application/xml, text/plain, text/html, *.*",
        //"Content-Type": "multipart/form-data",
        "Content-Type": "application/json",
        // "Content-Disposition": "attachment; filename=file",
        Authorization: "Bearer "   JSON.parse(authToken),
      },

      data,
    })
      .then((res) => {
        Swal.fire({
          title: "Car",
          type: "success",
          text: "Car Update Successfully  !",
          showConfirmButton: false,
          timer: 2000,
        });
      })
      .catch((err) => {
        Swal.fire({
          title: "Car",
          type: "error",
          text: "Error while updating new Car!",
          timer: 2000,
        });
      });
  }

  componentDidMount() {
    axios
      .get(`${config.apiUrl.car}${this.props.match.params.pk}/profile/`, {
        method: "GET",
        headers: {
          Accept: "application/json",
          "Content-Type": "application/json",
          Authorization: "Bearer "   JSON.parse(authToken),
        },
      })
      .then((res) => {
        //console.log(res);
        this.setState({
          car_photo: [...res.data.car_photo],
        });
      })
      .catch((err) => {
        console.log(err);
      });
  }

    async onChange(e, index) {
        if (["category", "sub_category"].includes(e.target.name)) {
          let cats = [...this.state.car_photo];
          cats[index][e.target.name] = e.target.value;
          await this.setState({
            cats,
          });
        } else {
          this.setState({ [e.target.name]: e.target.value });
        }
        console.log("hello", this.props.doc);
      }


 

    async handleImage(e, index) {
        if (["file"].includes(e.target.name)) {
          let cats = [...this.state.car_photo];
    
          cats[index][e.target.name] = e.target.files[0]; 
    
          await this.setState({
            cats,
          });
        
        
        } else {
          this.setState({ [e.target.name]: e.target.files[0] });
        }
      }



  render() {
   
    const { t } = this.props;

    return (
      <div className="container1" style={{ marginTop: "30px" }}>
        <Helmet>
          <title>{t("car_metrics_edit")}</title>
        </Helmet>
      


        <div className="headerr" id="headerr" style={{ marginTop: "-6px" }}>
        
          <form onSubmit={this.handleSubmit}>
            <div >

{this.state.car_photo
              .slice(0, 2)

              .map((inputField, index) => (
                <div className="row">
                 
                  <div className="form-group">
                    <select
                      name="sub_category"
                      class="form-control donn"
                      value={inputField.sub_category}
                      onChange={(e) => {
                        this.onChange(e, index);
                      }}
                      style={{ width: "220px" }}
                    >
                      <option value="" selected display hidden>
                        Select Category
                      </option>
                      <option value="Registration Documentation">
                        Registration Documentation
                      </option>
                      <option value="Plate Number Documentation">
                        Plate Number doc
                      </option>
                    </select>
                  </div>
                  amp;nbsp; amp;nbsp;
                  <div className="">
                  </div>
                  <div class="form-group">
                    <input
                      type="file"
                      name="file"
                      // value={inputField.file}
                      onChange={(e) => {
                        this.handleImage(e, index);
                      }}
                      class="form-control-file"
                      id="exampleFormControlFile1"
                    />
                  </div>
                </div>
              ))}

           

            <div style={{ marginTop: "70px" }}>
              <center>
                <button
                  type="submit"
                  value="Get Data"
                  className="btn btn-login text-white font-weight-bolder boxx "
                  id="button1"
                  style={{
                    height: "40px",
                    fontSize: "13px",

                    width: "200px",
                    background: "rgba(183, 28, 28, 1)",
                    border: "none",
                    color: "white",
                    margin: "auto",
                  }}
                >
                  SAVE
                </button>
              </center>
            </div>
              
            
          </div>
          </form>
        </div>
      </div>
    );
  }
}

export default withTranslation()(EditCar);
  

Вот изображение данных, которые я проверил console.log(data) после отправки формы.
[Console .log1

Вот изображение того, что отображается в запросе после отправки формы. [Данные ответа image2

Комментарии:

1. console.log (данные) перед axios в методе handleSubmit и посмотреть результат.

2. Он показывает данные там, когда я пытался проверить console.log(data) @MrKhan