Slot12_Upload-Download-Files
Slot12_Upload-Download-Files
Objectives
◆ Introduction Upload
◆ Demo Upload with Single Upload and Multiple Upload
◆ Introduction and Demo Download
2
What is Upload?
3
Uploading Large Files in Node.js
4
Using Multer
5
Demo 1: Using Multer with
Single File
• 1. Create a simple server to handle uploads: To support file
upload processing in a Node.js application using Express, a
specific route needs to be set up.
• Here's how to set up the uploadRoutes.js file to handle file
upload requests:
• Set up a router using express and multer, specialized middleware for
handling multipart/form-data, which is the data type commonly used
for file uploads.
• Create the corresponding folder: uploads
7
// routers/uploadRoutes.js
const express = require('express');
const multer = require('multer');
const router = express.Router();
on the server. // 2. Make sure you have created this folder in your project
},
destination: Function to
filename: function (req, file, cb) {
• cb(null, file.fieldname + '-' + Date.now() + '.' + file.originalname.split('.').pop());
determine where to save the }
uploaded file.
});
filename: Function to
const upload = multer({ storage: storage });
•
determine the file name when // 3. Route to handle POST request for file upload
8
const express = require('express');
const uploadRoutes = require('./routes/uploadRoutes');
const app = express();
Use router in server.js // some legacy browsers (IE11, various SmartTVs) choke on 204
};
app.listen(8000, () => {
console.log('The server is running on port 8000');
});
9
import React, { useState } from 'react';
import axios from 'axios';
function FileUpload() {
const [file, setFile] = useState(null);
// Function to handle when file is selected
const onFileChange = event => {setFile(event.target.files[0]); };
// Function to handle when the user presses the "Upload" button
const onFileUpload = () => {
• 2. In React UI const formData = new FormData();
formData.append(
Express server's
};
return (
10
• 2. In React UI – cont’d import FileUpload from "./Components/FileUpload";
function App() {
return (
<div className="App">
<header className="App-header">
<FileUpload />
</header>
</div>
);
}
11
Demo 2: Using Multer with
Multiple File
// routers/uploadMultipeRoutes.js
const express = require('express');
const multer = require('multer');
const router = express.Router();
In Server:
destination: function (req, file, cb) {
• },
cb(null, 'uploads/');
• Here's how you can modify the router.post('/upload', upload.array('files', 5), function (req, res, next) { // Replace
'file' with 'files' and limit the number to 5
code in if (!req.files || req.files.length === 0) {
uploadMultipleRoutes.js to
return res.status(400).send('No files were uploaded.');
}
handle uploading multiple // Get the list of uploaded files
files: const uploadedFiles = req.files.map(file => file.originalname);
// Using downloadRoutes
app.use('/api', downloadRoutes);
13
// Components/FileUploadMultiple.js
import React, { useState } from 'react';
import axios from 'axios';
function FileUpload() {
const [files, setFiles] = useState([]);
// Function to handle when files are selected
const onFileChange = event => {
setFiles(event.target.files); // Let state be an array of files
In React UI:
};
•
// Function to handle when the user presses the "Upload" button
const onFileUpload = () => {
and FormData
}
// Send FormData to the '/upload' endpoint on the server
axios.post("http://localhost:8000/api/upload", formData, {
headers: { 'Content-Type': 'multipart/form-data' }
}).then(response => {
alert('Files are uploaded successfully');
}).catch(err => { console.error('Error uploading files', err); });
};
return (
<div>
<h1>File Upload</h1>
<input type="file" multiple onChange={onFileChange} />
<button onClick={onFileUpload}>
Upload!
</button>
</div>
);
}
export default FileUpload;
14
• Demo: import FileUploadMultiple from "./Components/FileUploadMultiple";
function App() {
return (
<div className="App">
<header className="App-header">
<FileUploadMultiple />
</header>
</div>
);
}
15
What is Download?
16
Demo 3: Download File
// routers/fileRoutes.js
res.json(files);
});
});
module.exports = router;
18
// FileList.js
import React, { useState, useEffect } from 'react';
import axios from 'axios';
import DownloadFile from './DownloadFile';
function FileList() {
const [files, setFiles] = useState([]);
}, []);
return (
<div>
<h2>Uploaded Files</h2>
<ul>
{files.map((file, index) => (
<li key={index}>
{file} <DownloadFile filename={file} />
</li>
))}
</ul>
</div>
);
}
19
import FileList from "./Components/FileList";
function App() {
return (
<div className="App">
<header className="App-header">
<FileList />
</header>
</div>
);
}
20
Summary
◆ Concepts were introduced:
◆ Introduction Upload
◆ Demo Upload with Single Upload and Multiple Upload
◆ Introduction and Demo Download
21