<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Saksham Gupta</title>
    <description>The latest articles on DEV Community by Saksham Gupta (@sakshamcoder).</description>
    <link>https://dev.to/sakshamcoder</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F631882%2F04c5b2e6-18b0-4756-9070-a96a61a6ff90.png</url>
      <title>DEV Community: Saksham Gupta</title>
      <link>https://dev.to/sakshamcoder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sakshamcoder"/>
    <language>en</language>
    <item>
      <title>Upload and handle file in ReactJs and NodeJs using FormData.</title>
      <dc:creator>Saksham Gupta</dc:creator>
      <pubDate>Sat, 15 May 2021 19:31:47 +0000</pubDate>
      <link>https://dev.to/sakshamcoder/upload-and-handle-file-in-reactjs-and-nodejs-using-formdata-2ekh</link>
      <guid>https://dev.to/sakshamcoder/upload-and-handle-file-in-reactjs-and-nodejs-using-formdata-2ekh</guid>
      <description>&lt;h3&gt;
  
  
  Upload and handle file from ReactJs and NodeJs using FormData.
&lt;/h3&gt;

&lt;h5&gt;
  
  
  Introduction
&lt;/h5&gt;

&lt;p&gt;You may not have ever handled file uploads in React or any other technologies, but there is a high possibility you’ll encounter the need for it, whether tor update profile photos of users, CSV files, or PDFs, to mention but a few. In this guide, you’ll learn how to upload files in your React apps(Frontend) to NodeJs(Backend).&lt;/p&gt;

&lt;h5&gt;
  
  
  Set Up an App
&lt;/h5&gt;

&lt;p&gt;To get started, run the following command in your terminal or visit &lt;a href="https://react.new" rel="noopener noreferrer"&gt;React&lt;/a&gt; to get a fully configured React development environment via &lt;a href="https://codesandbox.io." rel="noopener noreferrer"&gt;Sandbox&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-react-app &amp;lt;YOUR_APP_NAME&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;/em&gt; refers to your preferred app name.&lt;/p&gt;

&lt;p&gt;Next, create a simple component that has a file input with an upload button.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { useState } from "react";
import "./../App.css";
const FileUpload = () =&amp;gt; {
 const [selectedFile, setSelectedFile] = useState();
 const [isFilePicked, setIsFilePicked] = useState(false);
 const changeHandler = (event) =&amp;gt; {
  setSelectedFile(event.target.files[0]);
  event.target.files[0] &amp;amp;&amp;amp; setIsFilePicked(true);
 };
 const handleSubmission = () =&amp;gt; {
  // HANDLING FILE AS SENDING FILE INTO BACKEND
  if (!isFilePicked) return;
  const formData = new FormData();
  formData.append("File", selectedFile);
   // ALSO ADD RANDOM VALUE IF YOU WANT LIKE STRING , OBJECT OR      ARRAY
  formData.append("carDetail", {
   car: "honda",
   engine: "1498 cc",
   fuel_Type: "Petrol &amp;amp; Diesel",
 });
// API CALL
 fetch("http://localhost:3001/", {
  method: "POST",
  body: formData,
 })
 .then((response) =&amp;gt; response.json())
 .then((result) =&amp;gt; {
  console.log("Success:", result);
 })
 .catch((error) =&amp;gt; {
   console.error("Error:", error);
  });
 };
return (
 &amp;lt;div className="App"&amp;gt;
 &amp;lt;input type="file" name="file" onChange={changeHandler} /&amp;gt;
  &amp;lt;div&amp;gt;
   &amp;lt;button onClick={handleSubmission}&amp;gt;Submit&amp;lt;/button&amp;gt;
  &amp;lt;/div&amp;gt;
 {isFilePicked ? (
 &amp;lt;div&amp;gt;
  &amp;lt;p&amp;gt;Filename: {selectedFile.name}&amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;Filetype: {selectedFile.type}&amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;Size in bytes: {selectedFile.size}&amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;
   lastModifiedDate:{" "}
   {selectedFile.lastModifiedDate.toLocaleDateString()}
  &amp;lt;/p&amp;gt;
 &amp;lt;/div&amp;gt;
 ) : (
 &amp;lt;div&amp;gt;
  &amp;lt;p&amp;gt;Select a file&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
 )}
 &amp;lt;/div&amp;gt;
 );
};
export default FileUpload;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Network Response Will be like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File will be in binary.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3wkd7dg6hz7oq00ovz1y.PNG" alt="Alt Text"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next, create a Backend with mongodb which will recieve FormData from frontend and process it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var express = require(“express”);
const upload = require(“express-fileupload”);
var cors = require(“cors”);
var app = express();
//MIDDLEWARES
app.use(upload());
app.use(cors());
//ROUTE DEFINE
app.post(“/”, async function (req, res) {
 try {
  // IN REQ.FILES.”YOUR_FILE_NAME” WILL BE PRESENT
  const file = req.files;
  const bodyData = req.body;
  // console.log(file);
  // console.log(bodyData);
  res.status(200).send({
  message: “FILE RECEIVED!”,
 });
 } catch (error) {
 res.send(“ERROR”);
 }
});
var PORT = 3001;
app.listen(PORT, function () {
 console.log(“Server is running on PORT:”, PORT);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Conclusion
&lt;/h5&gt;

&lt;p&gt;For refernce i have added my github repo so you can clone it also look into code deeply.&lt;br&gt;
&lt;a href="https://github.com/Saksham-coder/React_file_upload" rel="noopener noreferrer"&gt;Github Repo.&lt;/a&gt;&lt;br&gt;
Thank You.&lt;/p&gt;

</description>
      <category>node</category>
      <category>react</category>
      <category>fileupload</category>
      <category>formdata</category>
    </item>
  </channel>
</rss>
