web-dev-qa-db-fra.com

Comment afficher une image sélectionnée dans le type d'entrée = fichier dans reactJS

J'essaie d'afficher une image sélectionnée sur mon ordinateur dans mon application Web. J'ai renvoyé la question suivante qui répond à la question que j'essaie de résoudre.

Comment afficher l'image sélectionnée sans envoyer de données au serveur?

J'ai ma partie html comme ça

 <div className="add_grp_image_div margin_bottom">
      <img src={img_upload} className="add_grp_image"/>
      <input type="file" className="filetype" id="group_image"/>
      <span className="small_font to_middle">Add group image</span>
      <img id="target"/>
 </div>

Je souhaite afficher l'image sélectionnée dans

<img id="target"/>

Comment puis-je faire ceci?

J'ai également référencé FileReader documents.

https://developer.mozilla.org/en-US/docs/Web/API/FileReader

9
CraZyDroiD

Essaye ça

<input type="file" onChange={this.onImageChange} className="filetype" id="group_image"/>

Ajouter une méthode à la classe

onImageChange = (event) => {
  if (event.target.files && event.target.files[0]) {
    let reader = new FileReader();
    reader.onload = (e) => {
      this.setState({image: e.target.result});
    };
    reader.readAsDataURL(event.target.files[0]);
  }
}

ou vous pouvez utiliser URL.createObjectURL

onImageChange = (event) => {
 if (event.target.files && event.target.files[0]) {
   this.setState({
     image: URL.createObjectURL(event.target.files[0])
   });
 }
}

Et afficher l'image

<img id="target" src={this.state.image}/>
25
Giang Le

j'espère que ça marche pour toi

            <form onSubmit={form => submitForm(form)}>
              <input
                accept="image/*"
                onChange={onImageChange}
                className={classes.inputImage}
                id="contained-button-file"
                multiple
                name="image"
                type="file"
              />
              <label htmlFor="contained-button-file">
                <IconButton component="span">
                  <Avatar
                    src={mydata.imagePreview}
                    style={{
                      margin: "10px",
                      width: "200px",
                      height: "200px"
                    }}
                  />
                </IconButton>
              </label>
              <Button
                type="submit"
                variant="outlined"
                className={classes.button}
              >
                Default
              </Button>
            </form>

onImageChange

  const onImageChange = event => {
    if (event.target.files && event.target.files[0]) {
      let reader = new FileReader();
      let file = event.target.files[0];
      reader.onloadend = () => {
        setData({
          ...mydata,
          imagePreview: reader.result,
          file: file
        });
      };
      reader.readAsDataURL(file);
    }
  };

submitForm

  const submitForm = form => {
    form.preventDefault();
    const formData = new FormData();
    formData.append("image", mydata.file);
    // for (var pair of formData.entries()) {
    //   console.log(pair[1]);
    // }
    const config = {
      headers: {
        "content-type": "multipart/form-data"
      }
    };
    axios
      .post("api/profile/upload", formData, config)
      .then(response => {
        alert("The file is successfully uploaded");
      })
      .catch(error => {});
  };
0
Buk Lau