LMK

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.

Pliki wysyłamy metodą post

Wybieramy zdjęcie (Select Files):

Wybieramy zdjęcie

Wysyłamy (Send), sprawdzamy:

Wysyłamy

Plik .jpeg znajdziemy teraz w katalogu images. Uwaga zostanie przycięty, ponieważ w kodzie mamy określony parametr, wielkość pliku 1 MB.