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

Cra*_*oiD 7 filereader input-type-file reactjs

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

如何显示所选图像而不将数据发送到服务器?

我有这样的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>
Run Code Online (Sandbox Code Playgroud)

我想在中显示所选图像

<img id="target"/>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我也提到了FileReader文档.

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

Gia*_* Le 27

试试这个

<input type="file" onChange={this.onImageChange} className="filetype" id="group_image"/>
Run Code Online (Sandbox Code Playgroud)

向类添加方法

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]);
  }
}
Run Code Online (Sandbox Code Playgroud)

或者你可以使用 URL.createObjectURL

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

并显示图像

<img id="target" src={this.state.image}/>
Run Code Online (Sandbox Code Playgroud)


Abe*_*med 7

最近我遇到需要类似的功能。这是我使用的实现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>
  );
}

Run Code Online (Sandbox Code Playgroud)

我创建了一个自定义hook,以便可以在应用程序中的任何位置重复使用。返回hook图像srcuploader function. 然后可以将图像src链接到<img src={..} />,然后在input更改时您可以将 传递euploader function