Multer przesyłanie plików
Files upload
Multer
Używamy multera do przesyłania plików:
Instalacja:
npm install -S multer express http-errors
Inicjuje naszą aplikację:
npm init -y
Zostanie stworzony package.json jest to plik konfiguracyjny naszej apki.
Stworzymy sobie plik:
touch app.js
Kod:
const createError = require('http-errors');
const express = require('express');
const path = require('path');
const fs = require('fs').promises;
const app = express();
const multer = require('multer');
const uploadDir = path.join(process.cwd(), 'uploads');
const storeImage = path.join(process.cwd(), 'images');
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, uploadDir);
},
filename: (req, file, cb) => {
cb(null, file.originalname);
},
limits: {
fileSize: 1048576,
},
});
const upload = multer({
storage: storage,
});
app.post('/upload', upload.single('picture'), async (req, res, next) => {
const { description } = req.body;
const { path: temporaryName, originalname } = req.file;
const fileName = path.join(storeImage, originalname);
try {
await fs.rename(temporaryName, fileName);
} catch (err) {
await fs.unlink(temporaryName);
return next(err);
}
res.json({ description, message: 'Plik załadowany pomyślnie', status: 200 });
});
// catch 404 and forward to error handler
app.use((req, res, next) => {
next(createError(404));
});
app.use((err, req, res, next) => {
res.status(err.status || 500);
res.json({ message: err.message, status: err.status });
});
const isAccessible = path => {
return fs
.access(path)
.then(() => true)
.catch(() => false);
};
const createFolderIsNotExist = async folder => {
if (!(await isAccessible(folder))) {
await fs.mkdir(folder);
}
};
const PORT = process.env.PORT || 3100;
app.listen(PORT, async () => {
createFolderIsNotExist(uploadDir);
createFolderIsNotExist(storeImage);
console.log(`Server running. Use on port:${PORT}`);
});
Jak zdefiniowaliśmy kod, tworzymy sobie foldery
mkdir images; mkdir upload
Uruchamiamy apkę:
node app.js
Wynik:
{"message":"Not Found","status":404}
Uruchamiamy Postmana
Pliki wysyłamy metodą post.
Wybieramy zdjęcie (Select Files):
Wysyłamy (Send), sprawdzamy:
Plik .jpeg znajdziemy teraz w katalogu images. Uwaga zostanie przycięty, ponieważ w kodzie mamy określony parametr, wielkość pliku 1 MB.