Как получить изображения из e.target.файлы[0] по идентификатору ввода, чтобы я мог задать состояние изображений, а затем опубликовать его через axios

#reactjs

Вопрос:

Я пытался получить файлы по идентификатору и обновить состояние изображений, но я могу выбрать изображения с их идентификатором. Пожалуйста, скажите мне, как выбрать файл по идентификатору и обновить соответствующие состояния. Заранее спасибо.

 export class KycForm extends React.Component {
    state = {
        adhar_front: undefined,
        adhar_back: undefined,
        avatar: undefined,
        passbook: undefined,
        driving_license: undefined,
        pan_card: undefined

    };
    handleImageChange = (e) => {
        console.log(e.target.files[0])
    }

    handleSubmit = (e) => {
        e.preventDefault();
        console.log(this.state);
        console.log(this.state.images)
        let form_data = new FormData();
        for (let i = 0; i < this.state.images.length; i  ) {
            form_data.append('this is imput file', this.state.images[i], this.state.images[i].name)
        };
        console.log("fORM DTATA APPENDED: "   form_data)
        this.props.createUserKyc(form_data)
    };

   render() {
    return (
      <div className="col-md-6 m-auto">
        <div className="card card-body mt-5">
          <h2 className="text-center">Complete Your KYC</h2>
          <form onSubmit={this.handleSubmit} encType="multipart/form-data">
            <div className="form-group">
              <label>Adhar Front</label>
              <input
                accept="image/png, image/jpeg"
                className="form-control"
                name="adhar_front"
                onChange={this.handleImageChange}
                required
                type="file"
              />
            </div>
            <button>Upload</button>
          </form>
        </div>
      </div>
    );
  }
}
 

Ответ №1:

Сначала вы должны добавить multiple свои данные, затем вы можете загрузить некоторые файлы и загрузить их все, как я сделал ниже

 class App extends React.Component {
  render() {
    return (
      <div className="App">
        <KycForm />
      </div>
    );
  }
}
class KycForm extends React.Component {
  state = {
    adhar_front: undefined,
    adhar_back: undefined,
    avatar: undefined,
    passbook: undefined,
    driving_license: undefined,
    pan_card: undefined,
    images: []
  };
  handleImageChange = (e) => {
   const copy = { ...this.state };
    for (var i = 0; i < e.target.files.length; i  ) {
      copy.images.push(e.target.files[i]);
    }
    this.setState(copy);
  };

  handleSubmit = (e) => {
    e.preventDefault();
    let form_data = new FormData();
    form_data.append("images", this.state.images);
    console.log("images.length: ", this.state.images.length);

    //you can send form_data to server
  };

  render() {
    return (
      <div className="col-md-6 m-auto">
        <div className="card card-body mt-5">
          <h2 className="text-center">Complete Your KYC</h2>
          <form onSubmit={this.handleSubmit} encType="multipart/form-data">
            <div className="form-group">
              <label>Adhar Front</label>
              <input
                multiple
                accept="image/png, image/jpeg"
                className="form-control"
                name="adhar_front"
                onChange={this.handleImageChange}
                required
                type="file"
              />
            </div>
            <button>Upload</button>
          </form>
        </div>
      </div>
    );
  }
}
ReactDOM.render(
  <App />,
  document.getElementById("root")
); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>