React File upload


Hey there,Today we are going to discuss about react file uploading.We MERN developers use multer from our file uploading.But in some case when we are doing a demo project or practicing some thing then if i have to setup whole multer code base then it is horrible.For that today i am going to show you how can you upload a file using a react package called react-file-base64.

Today we are going to build the following app

full app image

Now,at first setup out project

create a folder on Desktop and get init it

$ cd Desktop
$ mkdir react-file-upload
$ cd react-file-upload

and then create brand new react project with typescript

$ npx create-react-app ./ --template typescript

Now clean up all unnecessary files and get started

At the top of App.tsx file import

import FileBase from 'react-file-base64'

Now add some jsx to out components

<form onSubmit={handleSubmit}>
      <FileBase/>
      <button type="submit">Send</button>
      <div>
        <img src='' alt="react project" />
      </div>
    </form>

And add some state and change handler for controlling the form

type State = {
  image: string;
};
const [data, setData] = useState<State>({
    image: "",
  });
  const [image, setImage] = useState("");
  const handleSubmit = (e: React.SyntheticEvent) => {
    e.preventDefault();
  };

We have to give three props to our FileBase Component they are type,multiple,onDone.So,give them to FileBase

<FileBase
        type="file"
        multiple={false}
        onDone={({ base64 }: { base64: string }) =>
          setData({ ...data, image: base64 })
        }
      />

Here onDone works same as onChange.onDone receives a parameter which contains base64.You should console log that parameter to see what the parameter contains.Now set base64 to the state.

Now add console log the data form onSubmit handler

const handleSubmit = (e: React.SyntheticEvent) => {
    e.preventDefault();
    console.log(data);
  };

Now if you select a photo and submit the form you should see something in the console.You should see and object containing something like this

base64 photo

you see the image property contains something like string.This string goes into src attribute of an img element.

Now you can save this string to your database.So, you no longer need to store a lot of image in in folder just save this string.

In this application we are going to use this string to our img element

Change image elements src like this

<img src={image ? image : ""} alt="react project" />

and set image string to image state from submit handler

const handleSubmit = (e: React.SyntheticEvent) => {
    e.preventDefault();
    setImage(data.image);
  };

now go to your browser and try to upload images.

Thank you for being with me so long.See you.Bye!

Source: DEV Community

November 14, 2021
Category : News
Tags: base64 | fileupload | React | typescript

Leave a Reply

Your email address will not be published. Required fields are marked *

Sitemap | Terms | Privacy | Cookies | Advertising

Senior Software Developer

Creator of @LzoMedia I am a backend software developer based in London who likes beautiful code and has an adherence to standards & love's open-source.