How to Upload a File Using Javascript React

Pankod profile image Melih Ekinci

How to Multipart File Upload Using FormData with React Hook Course

In this case, nosotros will learn how to upload files with React Hook Form, which is very preferred for managing forms with React. Nosotros will use FormData to upload a file and nosotros will upload a file of type multipart/form-information.

Introduction

We will examine step by step how to utilise the Multipart file upload procedure, which is more often than not used to upload an image or file to a server, with React Claw Form. Let's first create a unproblematic express server to upload the files. Then, let's upload our files to this server with the React Hook course. Permit'due south start!

Create Express Server

            npm i limited                      

Enter fullscreen way Exit fullscreen mode

So, let's install the cors packet necessary to allow file upload to the server, and the limited-fileupload packet to manage the paths of the downloaded files.

            npm i cors express-fileupload                      

Enter fullscreen style Go out fullscreen mode

We have completed our installations to create a simple server. This server will indicate that the file has been uploaded successfully or failed, in response to a POST call to an endpoint that nosotros accept specified.

                          import              express              from              "              express              "              ;              import              fileupload              from              "              express-fileupload              "              ;              import              cors              from              "              cors              "              ;              const              app              =              express              ();              app              .              use              (              fileupload              ({              createParentPath              :              true              ,              }),              );              app              .              use              (              cors              ());              app              .              apply              (              express              .              json              ());              app              .              utilize              (              express              .              urlencoded              ({              extended              :              true              }));              app              .              post              (              "              /upload-file              "              ,              async              (              req              ,              res              )              =>              {              endeavour              {              if              (              !              req              .              files              )              {              res              .              ship              ({              condition              :              "              failed              "              ,              message              :              "              No file uploaded              "              ,              });              }              else              {              let              file              =              req              .              files              .              file              ;              console              .              log              (              req              .              files              );              file              .              mv              (              "              ./uploads/              "              +              file              .              name              );              res              .              send              ({              status              :              "              success              "              ,              bulletin              :              "              File is uploaded              "              ,              information              :              {              proper noun              :              file              .              proper noun              ,              mimetype              :              file              .              mimetype              ,              size              :              file              .              size              ,              },              });              }              }              grab              (              err              )              {              res              .              status              (              500              ).              send              (              err              );              }              });              const              port              =              process              .              env              .              PORT              ||              5000              ;              app              .              listen              (              port              ,              ()              =>              panel              .              log              (              `Server started on port                            ${              port              }              `              ));                      

Enter fullscreen way Exit fullscreen mode

Express Server

We created a server with Express. Every bit you can run across, nosotros take successfully started our server, now we have an endpoint to handle requests to this port. Now permit'due south create a React projection and send our files to this server with React Hook Form.

Create React Project

Let's create a react project with Create React App and then install the necessary packages for our project.

            npx create-react-app react-hook-form-multipart-upload                      

Enter fullscreen manner Get out fullscreen fashion

Subsequently your project is ready, allow's go to our project directory and install the React Hook Form package.

                          cd              react-hook-form-multipart-upload npm              install              react-claw-form  npm run beginning                      

Enter fullscreen mode Go out fullscreen way

Multipart File Upload with React Claw Form

We created our React project and installed our react hook form parcel. Now permit'south create a form and manage it with the react claw class.

                          import              React              from              "              react              "              ;              import              {              useForm              }              from              "              react-claw-form              "              ;              function              App              ()              {              const              {              register              ,              handleSubmit              }              =              useForm              ();              const              onSubmit              =              ()              =>              {};              return              (              <              div              className              =              "App"              >              <              form              onSubmit              =              {              handleSubmit              (              onSubmit              )              }              >              <              input              type              =              "file"              {              ...              register              (              "              file              "              )              }              />              <              input              blazon              =              "submit"              />              </              form              >              </              div              >              );              }              consign              default              App              ;                      

Enter fullscreen mode Exit fullscreen style

To manage our grade and its elements, we defined the annals and handleSubmit methods from the react hook grade. Now, allow's upload the file selected in our onSubmit method to our server by placing it in the formData.

                          import              React              from              "              react              "              ;              import              {              useForm              }              from              "              react-hook-form              "              ;              function              App              ()              {              const              {              annals              ,              handleSubmit              }              =              useForm              ();              const              onSubmit              =              async              (              data              )              =>              {              const              formData              =              new              FormData              ();              formData              .              append              (              "              file              "              ,              data              .              file              [              0              ]);              const              res              =              wait              fetch              (              "              http://localhost:5000/upload-file              "              ,              {              method              :              "              POST              "              ,              body              :              formData              ,              }).              then              ((              res              )              =>              res              .              json              ());              alarm              (              JSON              .              stringify              (              `              ${              res              .              message              }              , condition:                            ${              res              .              status              }              `              ));              };              return              (              <              div              className              =              "App"              >              <              form              onSubmit              =              {              handleSubmit              (              onSubmit              )              }              >              <              input              type              =              "file"              {              ...              register              (              "              file              "              )              }              />              <              input              blazon              =              "submit"              />              </              course              >              </              div              >              );              }              export              default              App              ;                      

Enter fullscreen mode Go out fullscreen mode

Our projection is ready! With React Hook Form, we can at present ship the selected file to our server in multipart/form-information type. Let's test it!

Multipart File Upload

Are You Looking React Web Framework?

A React-based framework for edifice internal tools, apace. refine offers lots of out-of-the box functionality for rapid development, without compromising extreme customizability. Use-cases include, but are not limited to admin panels, B2B applications and dashboards.

🔥 Headless : Works with any UI framework

⚙️ Zero-configuration: I-line setup with superplate. It takes less than a minute to showtime a projection.

📦 Out-of-the-box : Routing, networking, authentication, country management, i18n and UI.

🔌 Backend Agnostic : Connects to any custom backend. Congenital-in support for Residue API, Strapi, NestJs CRUD, Hasura, Nhost, Airtable, Supabase, Appwrite and Altogic.

📝 Native Typescript Core : You can ever opt-out for apparently JavaScript.

🐜 Enterprise UI : Works seamlessly with Ant Design System. (Support for multiple UI frameworks is on the Roadmap)

📝 Average-gratuitous Lawmaking : Keeps your codebase make clean and readable.

Refer to the refine documentation for more data. →

How to Multipart File Upload with Refine and React Hook Form?

It allows you to manage your forms and ship data to your server with the refine-react-hook-form adapter it publishes with its refine headless characteristic. With this adapter, y'all tin can use all the features of the React Hook Class in harmony with refine. You can as well perform Multipart File Upload(multipart/class-information) operation very easily using this adapter.

Refer to the refine-react-hook-form adapter documentation for detailed information. →

View Source

You lot can manage your course very easily with the refine-react-hook-form adapter. The data created in the course will be automatically saved to the database with the refine onFinish method.

This is a basic CMS app that was created with refine'south headless feature. Y'all may quickly build records and save them to your database using refine. We'll expect at the CreatePost page of this step. We'll create a record in the form and manage it with the refine-react-hook-course adapter.

Refine Create Post Folio:

                          import              {              useState              }              from              "              react              "              ;              import              {              useForm              }              from              "              @pankod/refine-react-hook-form              "              ;              import              {              useSelect              ,              useApiUrl              }              from              "              @pankod/refine-core              "              ;              import              axios              from              "              axios              "              ;              export              const              PostCreate              :              React              .              FC              =              ()              =>              {              const              [              isUploading              ,              setIsUploading              ]              =              useState              <              boolean              >              (              false              );              const              {              refineCore              :              {              onFinish              ,              formLoading              },              register              ,              handleSubmit              ,              formState              :              {              errors              },              setValue              ,              }              =              useForm              ();              const              apiURL              =              useApiUrl              ();              const              {              options              }              =              useSelect              ({              resource              :              "              categories              "              ,              });              const              onSubmitFile              =              async              ()              =>              {              setIsUploading              (              true              );              const              inputFile              =              document              .              getElementById              (              "              fileInput              "              ,              )              as              HTMLInputElement              ;              const              formData              =              new              FormData              ();              formData              .              suspend              (              "              file              "              ,              inputFile              ?.              files              ?.              detail              (              0              )              equally              File              );              const              res              =              await              axios              .              mail              <              {              url              :              cord              }              >              (              `              ${              apiURL              }              /media/upload`              ,              formData              ,              {              withCredentials              :              fake              ,              headers              :              {              "              Access-Command-Allow-Origin              "              :              "              *              "              ,              },              },              );              setValue              (              "              thumbnail              "              ,              res              .              data              .              url              );              setIsUploading              (              false              );              };              render              (              <              form              onSubmit              =              {              handleSubmit              (              onFinish              )              }              >              <              characterization              >Title:              </              characterization              >              <              input              {              ...              register              (              "              title              "              ,              {              required              :              true              })              }              />              {              errors              .              title              &&              <              bridge              >This field is required</              span              >              }              <              br              />              <              label              >Status:              </              characterization              >              <              select              {              ...              register              (              "              condition              "              )              }              >              <              choice              value              =              "published"              >published</              option              >              <              option              value              =              "typhoon"              >typhoon</              option              >              <              option              value              =              "rejected"              >rejected</              option              >              </              select              >              <              br              />              <              label              >Category:              </              characterization              >              <              select              defaultValue              =              {              ""              }              {              ...              register              (              "              category.id              "              ,              {              required              :              true              })              }              >              <              selection              value              =              {              ""              }              disabled              >              Please select              </              option              >              {              options              ?.              map              ((              category              )              =>              (              <              option              key              =              {              category              .              value              }              value              =              {              category              .              value              }              >              {              category              .              characterization              }              </              selection              >              ))              }              </              select              >              {              errors              .              category              &&              <              span              >This field is required</              span              >              }              <              br              />              <              characterization              >Content:              </              characterization              >              <              br              />              <              textarea              {              ...              annals              (              "              content              "              ,              {              required              :              true              })              }              rows              =              {              10              }              cols              =              {              50              }              />              {              errors              .              content              &&              <              span              >This field is required</              span              >              }              <              br              />              <              br              />              <              label              >Image:              </              label              >              <              input              id              =              "fileInput"              type              =              "file"              onChange              =              {              onSubmitFile              }              />              <              input              blazon              =              "hidden"              {              ...              register              (              "              thumbnail              "              ,              {              required              :              truthful              })              }              />              {              errors              .              thumbnail              &&              <              span              >This field is required</              bridge              >              }              <              br              />              <              br              />              <              input              type              =              "submit"              disabled              =              {              isUploading              }              value              =              "Submit"              />              {              formLoading              &&              <              p              >Loading</              p              >              }              </              form              >              );              };                      

Enter fullscreen manner Exit fullscreen mode

Refine Multipart File Upload

Every bit you can run into, we have easily saved both our information such as title, category, condition and an image in the form of multipart/form-data to our database using the refine-react-hook-form adapter. We've but shown how to utilize the Multipart File Upload feature for our instance in this tutorial. For examine refine CMS example, checkout the live codeSandbox below.

Refine Multipart Upload Live CodeSandbox Example

bledsoeambeek.blogspot.com

Source: https://dev.to/pankod/how-to-multipart-file-upload-using-formdata-with-react-hook-form-4d6d

0 Response to "How to Upload a File Using Javascript React"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel