How to send form data together with file to mysql

Viewed 37

Hello so i'm working on project which user can input data and upload file through form. I made this project with react js, node, express, and using mysql as database. Im currently having a problem to input name and upload file simultaneously. How to uplaod the data and file together with one button. sry for bad english

App.js

import React,{ useState, useEffect} from 'react';
import './App.css';
import Axios from 'axios';


function App() {
  const [invoice, setInvoice] = useState("");
  const [date, setDate] = useState ("");
  const [currency, setCurrency] = useState ("IDR");
  const [amount, setAmount] = useState("");
  const [title, setTitle] = useState("");
  const [path, setPath] = useState("");
  const [attachment, setAttachment] = useState("");
  const [dataList, setDataList] = useState([]);

  
 
  useEffect(() => {
    Axios.get('http://localhost:3001/api/get').then((response)=> {
      setDataList(response.data);
    })
  })


  const submitData = () => {
    Axios.post('http://localhost:3001/api/insert', {
      Invoice_No: invoice,
      Invoice_Date: date,
      Curr: currency,
      Amount: amount,
      Supplier: title,
      Path: path
    })
}

  return (
    <div className="App">
      <p>CRUD Applicaiton</p>


      <div className="formControl">
    
          <label>Invoice No</label>
          <input type="number"  onChange={(e)=> {
            setInvoice(e.target.value);
          }} />
          <label>Invoice Date</label>
          <input type="date"  onChange={(e)=> {
            setDate(e.target.value);
          }} />
          <label>Currency</label>
          <select onChange={(e)=> {
            setCurrency(e.target.value);
          }}>
            <option value="IDR">IDR</option>
            <option value="USD">USD</option>
            <option value="YEN">YEN</option>
          </select>
          <label>Amount</label>
          <input type="number"  onChange={(e)=> {
            setAmount(e.target.value);
          }} />
          <label>Title</label>
          <input type="text"  onChange={(e)=> {
            setTitle(e.target.value);
          }} />
      
          <button onClick={submitData}>Add Data</button>     
          <button type='reset'>Reset</button>
    
      </div>

    <div>
      <form method='POST' encType='multipart/form-data' action='http://localhost:3001/api/upload'>
        <input type="file" name="DocumentFile" />

        <button>ADD to DB</button>
        </form>
    </div>

    </div>
  );
}

export default App;

index.js

const express = require('express');
const fs = require('fs');
const bodyParser = require('body-parser');
const cors = require("cors");
const app = express();
const mysql = require('mysql');
const exphbs = require('express-handlebars'); 
const multer = require("multer")


const db = mysql.createPool({
    host: "localhost",
    user: "root",
    password: "",
    database: "work"
});

const upload = multer({storage:multer.memoryStorage()});



app.use(cors());
app.use(express.json() || express.static(".public") || express.static(".upload"));
app.use(bodyParser.urlencoded({extended: true}));





app.get("/api/get", (req, res) => {
    const sqlSelect= "SELECT * FROM invoice"
    db.query(sqlSelect, (err, result)=>{
        res.send(result);
    });
})

app.post("/api/insert", (req, res) => {
    const Invoice_No = req.body.Invoice_No
    const Invoice_Date = req.body.Invoice_Date
    const Currency = req.body.Curr
    const Amount = req.body.Amount
    const Title = req.body.Supplier

    const sqlInsert = "INSERT INTO invoice(Invoice_No, Invoice_Date, Curr, Amount, Supplier) VALUES (?,?,?,?,?)"
    db.query(sqlInsert, [Invoice_No, Invoice_Date, Currency, Amount, Title], (err, result)=>{
        console.log(err)
    });
})

app.post("/api/upload", upload.single('DocumentFile'), (req, res) => {
    const Path = req.file.buffer.toString('base64')

    q = "INSERT INTO invoice (Path) VALUES (?)"
    db.query(q, [Path], (err, result) => {
        console.log(Path)
    })
})

app.listen(3001, ()=> {
    console.log('running on port 3001')
});
0 Answers
Related