0

I got a problem with fileReader to render a preview image for uploading.

I cannot get base64 to show the image because I do not know how to use async to get the image before return.

Below is my code:

<div className="previewsection-el">
  <ul>
    {acceptedFiles.map((file, index) => {
      var filetype = file.path.split(".")[1];
      switch (filetype) {
        case "jpg":
        case "png":
        case "jpeg":
          var readImg = "";
          let reader = new FileReader();
          reader.onload = next => {
            readImg = reader.result;
          };
          reader.readAsDataURL(file);
          //cannot return here.
          return (
            <li>
              <img src={readImg} />
            </li>
          );
        case "rar":
        case "zip":
          return (
            <li>
              <i className="file-archive" />
            </li>
          );
        default:
          return (
            <li>
              <i className="material-icons">insert_drive_file</i>
            </li>
          );
      }
    })}
  </ul>
</div>;
halfer
  • 19,824
  • 17
  • 99
  • 186
Hai Tien
  • 2,929
  • 7
  • 36
  • 55
  • Rerender your `ul` after you get `readAsDataURL` result. https://stackoverflow.com/questions/38049966/get-image-preview-before-uploading-in-react – hoangdv Mar 06 '20 at 04:14
  • 1
    Don't use a FileReader. [Create a blob:// url](https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL) form this File and pass it synchronously as your state. – Kaiido Mar 06 '20 at 06:29
  • @Kaiido I see. thank you so much. – Hai Tien Mar 06 '20 at 06:33

0 Answers0