Create a file upload component and create a form in it that will handle multi part form data through it, and which will help users to select the file from the form and set the endpoint with Axios to upload the files in react js applications.
In this tutorial, you will learn how to upload files in react js applications using axios.
How to Upload Files in React Js using Axios?
Steps to handle multi-part Form Data in React using axios:
Step 1 – Create React App
In this step, open your terminal and execute the following command on your terminal to create a new react app:
npx create-react-app my-react-app
To run the React app, execute the following command on your terminal:
npm start
Check out your React app on this URL: localhost:3000
Step 2 – Install Axios and Bootstrap
Run the following command to install bootstrap library into your react app:
npm install bootstrap --save npm install axios --save
Import bootstrap.min.css file in src/App.js
file:
import React from 'react';
import '../node_modules/bootstrap/dist/css/bootstrap.min.css';
function App() {
return (
<div>
<h2>react file upload example</h2>
</div>
);
}
export default App;
Step 3 – Create File Upload Form Component
Create file upload form component named FileUpload.js
in src
directory that allows users to choose a file for upload and handle the upload process:
import React from 'react'
import axios from 'axios';
class FileUpload extends React.Component{
constructor(){
super();
this.state = {
selectedFile:'',
}
this.handleInputChange = this.handleInputChange.bind(this);
}
handleInputChange(event) {
this.setState({
selectedFile: event.target.files[0],
})
}
submit(){
const data = new FormData()
data.append('file', this.state.selectedFile)
console.warn(this.state.selectedFile);
let url = "http://localhost:8000/upload.php";
axios.post(url, data, { // receive two parameter endpoint url ,form data
})
.then(res => { // then print response status
console.warn(res);
})
}
render(){
return(
<div>
<div className="row">
<div className="col-md-6 offset-md-3">
<br /><br />
<h3 className="text-white">React File Upload Example - Tutsmake.com</h3>
<br />
<div className="form-row">
<div className="form-group col-md-6">
<label className="text-white">Select File :</label>
<input type="file" className="form-control" name="upload_file" onChange={this.handleInputChange} />
</div>
</div>
<div className="form-row">
<div className="col-md-6">
<button type="submit" className="btn btn-dark" onClick={()=>this.submit()}>Save</button>
</div>
</div>
</div>
</div>
</div>
)
}
}
export default FileUpload;
Step 4 – Import Component in App.js
Import FileUpload.js file component in src/App.js
file:
import React from 'react';
import '../node_modules/bootstrap/dist/css/bootstrap.min.css';
import FileUpload from './FileUpload'
function App() {
return (
<div className="App">
<FileUpload/>
</div>
);
}
export default App;
Step 5 – Create PHP File
Create upload.php
file and add the following code into it that handles file upload on the server:
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
// Folder Path For Ubuntu
// $folderPath = "/var/www/my-app/uploads";
// Folder Path For Window
$folderPath = "uploads/";
$file_tmp = $_FILES['file']['tmp_name'];
$file_ext = strtolower(end(explode('.',$_FILES['file']['name'])));
$file = $folderPath . uniqid() . '.'.$file_ext;
move_uploaded_file($file_tmp, $file);
return json_encode(['status'=>true]);
?>
Next, start the PHP server using the following command from the root of your file upload app:
php -S 127.0.0.1:8080
Now, you have a running PHP server that exposes an /upload.php
REST endpoint.
Conclusion
That’s it, you have learned how to upload file in react js app using axios.