import React, { useState } from 'react'; import axios from 'axios'; import Loader from '../../Loader/Loader'; const downloadFile = require('../../../downloadFile'); const SaveForm = ({ type, setType, setApiResponse }) => { const [selectedFile, setSelectedFile] = useState(); const [filename, setFilename] = useState(); const [loadingSave, setLoadingSave] = useState(false); const [loadingGetFile, setLoadingGetFile] = useState(false); const [filenameInput, setFilenameInput] = useState(); const [downloadName, setDownloadName] = useState(''); //post file to /api/save const handleSubmitFile = (event) => { setLoadingSave(true); event.preventDefault(); let formData = new FormData(); formData.append("file", selectedFile); let url = '/api/save'; axios.post(url, formData, { headers: { "Content-Type": "multipart/form-data" } }).then((response) => { setFilename(response.data); setLoadingSave(false); }).catch((error) => { if (error.response.data) { setApiResponse(error.response.data); } else { alert(error); } setLoadingSave(false); }); } //read file using /api/file const handleGetFile = (event) =>{ setLoadingGetFile(true); event.preventDefault(); let formData = new FormData(); formData.append("file", selectedFile); axios({ method: 'GET', url: `/api/file?filename=${filenameInput}&t=${type}&name=${downloadName}` }).then((response) => { if (type == 'file') { var workbook = response.data.workbook; var filename = response.data.newName; var byteCharacters = atob(workbook); var byteNumbers = new Array(byteCharacters.length); for (var i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } var byteArray = new Uint8Array(byteNumbers); var blob = new Blob([byteArray], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); var url = URL.createObjectURL(blob); downloadFile(url, filename); } else { setApiResponse(response.data); } setLoadingGetFile(false); }).catch((error) => { if (error.response.data){ setApiResponse(error.response.data); } else { alert(error); } setLoadingGetFile(false); }) } return (

Demo

handleSubmitFile(e)}>
setSelectedFile(e.target.files[0]))} /> {selectedFile ?

{selectedFile.name}

:

Drag file or click here.

}
{loadingSave? :
}
{filename && <>

Your saved file:

{filename} }
handleGetFile(e)} style={{marginTop:'20px'}}>
setFilenameInput(e.target.value))} placeholder="filename"/>
{type == 'file' &&
setDownloadName(e.target.value))} placeholder="name" value={downloadName} />
}

request url:

/api/file?filename= {filenameInput&& <> {encodeURIComponent(filenameInput)} } {type != 'csv' && <> &t={type} } {downloadName && <> &name={encodeURIComponent(downloadName)} }

{loadingGetFile? : }
); } export default (SaveForm);