如何在reactJS中显示从input type = file中选择的图像

时间:2017-05-16 04:19:09

标签: reactjs filereader input-type-file

我试图在我的网络应用中显示从我的电脑中选择的图像。我提到了以下问题,该问题解决了我试图解决的问题。

How to display selected image without sending data to server?

我有像这样的HTML部分

 <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>

我想在

中显示所选图像
<img id="target"/>

我该怎么做?

我也提到了FileReader个文档。

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

3 个答案:

答案 0 :(得分:20)

试试这个

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

将方法添加到类

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]);
  }
}

或者您可以使用URL.createObjectURL

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

并显示图像

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

答案 1 :(得分:0)

希望它对您有用

dict

onImageChange

            <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>

submitForm

  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);
    }
  };

答案 2 :(得分:0)

最近,我遇到了需要类似功能的情况。这是我使用hooks的实现。

export default function App() {
  const [image, setImage] = React.useState("");
  const imageRef = React.useRef(null);

  function useDisplayImage() {
    const [result, setResult] = React.useState("");

    function uploader(e) {
      const imageFile = e.target.files[0];

      const reader = new FileReader();
      reader.addEventListener("load", (e) => {
        setResult(e.target.result);
      });

      reader.readAsDataURL(imageFile);
    }

    return { result, uploader };
  }

  const { result, uploader } = useDisplayImage();

  return (
    <div className="App">
      <input
        type="file"
        onChange={(e) => {
          setImage(e.target.files[0]);
          uploader(e);
        }}
      />
      {result && <img ref={imageRef} src={result} alt="" />}
    </div>
  );
}

我创建了一个自定义hook,以便可以在应用程序中的任何地方重用它。 hook返回图像srcuploader function。 然后可以将图像src链接到<img src={..} />,然后在input进行更改时,只需将e传递到uploader function