Hello to all, welcome back to my blog. Today in this blog post, I am going to tell you, Reactjs Upload & Save Multiple Images PDF Video Files with Preview and Delete functionality.


Post Code Benefits, this post code will provide below things:
- Multiple Image, pdf, video files uploading.
 - Uploaded image will preview in modal popup.
 - Uploaded image can be delete.
 - All the files will be save inside folder with php.
 
For reactjs new comers, please check the below link:
Friends now I proceed onwards and here is the working code snippet and please use this carefully to avoid the mistakes:
1. Firstly friends we need fresh reactjs setup and for that we need to run below commands into our terminal and also w should have latest node version installed on our system:
npx create-react-app reactimageupload cd reactimageupload npm start // run the project
2. Now we need to run below commands to get bootstrap(for good layout), antdmodules into our react js app:
npm install antd npm install bootstrap --save npm start
3. Now friends, after are done with commands, now please open reactimageupload/src/App.js file and add below code inside it:
import React from 'react';
import './App.css';
//Bootstrap and jQuery libraries
import 'bootstrap/dist/css/bootstrap.min.css';
//Image upload modules
import { Upload, Modal, Button } from 'antd';
import { PlusOutlined } from '@ant-design/icons';
import axios from 'axios';
import "antd/dist/antd.css";
class App extends React.Component {
  
  
  render(){
    //Uploaded url
    function getBase64(file) {
      return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = () => resolve(reader.result);
        //reader.onerror = error => reject(error);
      });
    }
    
    class PicturesWall extends React.Component {
      state = {
        previewVisible: false,
        previewImage: '',
        previewTitle: '',
        fileList: [
        
        ],
      };
    
      handleCancel = () => this.setState({ previewVisible: false });
      //Image Preview
      handlePreview = async file => {
        if (!file.url && !file.preview) {
          file.preview = await getBase64(file.originFileObj);
        }
    
        this.setState({
          previewImage: file.url || file.preview,
          previewVisible: true,
          previewTitle: file.name || file.url.substring(file.url.lastIndexOf('/') + 1),
        });
      };
    
      handleChange = ({ fileList }) => this.setState({ fileList });
      handleSubmit = event => {
        event.preventDefault();
    
        let formData = new FormData();
        // add one or more of your files in FormData
        // again, the original file is located at the `originFileObj` key
        //Files Storage Looping
        for(var a = 0; a<this.state.fileList.length; a++)
        {
          formData.append("file[]", this.state.fileList[a].originFileObj);
          
        }
     
        //File saving API call
        axios
          .post("http://localhost/save.php", formData)
          .then(res => {
            alert("Files uploaded.");
            
          })
          .catch(err => {
            console.log("err", err);
          });
      }
    
      render() {
        const { previewVisible, previewImage, fileList, previewTitle } = this.state;
        const uploadButton = (
          <div>
            <PlusOutlined />
            <div style={{ marginTop: 8 }}>Upload</div>
          </div>
        );
        return (
          <>
            <Upload
             
              listType="picture-card"
              fileList={fileList}
              onPreview={this.handlePreview}
              onChange={this.handleChange}
              beforeUpload={() => false}
            >
              {fileList.length >= 8 ? null : uploadButton}
            </Upload>
            <Modal
              visible={previewVisible}
              title={previewTitle}
              footer={null}
              onCancel={this.handleCancel}
            >
              
              <img alt="example" style={{ width: '100%' }} src={previewImage} />
            </Modal>
            <Button type="primary" onClick={this.handleSubmit} // this button click will trigger the manual upload
        >
            Submit
        </Button>
          </>
        );
      }
    }
    return (
    <div className="MainDiv">
      <div className="jumbotron text-center pt-5"> 
          <h3 className="mt-5 mb-5">Therichpost.com</h3>
         
      </div>
      
      <div className="container">
          
          <PicturesWall />
        </div>
      </div>
  );
}
}
export default App;
4. Now friends, we need to create save.php file inside our xamp/htdocs folder and add below code inside it:
<?php
//Multiple Files Uploading
for($a=0; $a<count($_FILES["file"]["name"]); $a++)
{
$target_dir = "uploads/"; //image upload folder name
    $target_file = $target_dir . basename($_FILES["file"]["name"][$a]);
    //moving multiple images inside folder
    
    if (move_uploaded_file($_FILES["file"]["tmp_name"][$a], $target_file)) {
      $data = array("data" => "Files are valid and successfully uploaded.");
      
    }
    
  }
  print json_encode($data);
    die();
?>
5. Also guy’s we need to create `uploads` folder inside xamp/htdocs folder to save the files.
Now we are done friends. If you have any kind of query or suggestion or any requirement then feel free to comment below.
Note: Friends, I just tell the basic setup and things, you can change the code according to your requirements. For better understanding and live working must watch video above.
I will appreciate that if you will tell your views for this post. Nothing matters if your views will good or bad.
Jassa
Thanks
