Przejdź do treści stopki
POMOC NODE

Multer Node.js (Jak działa dla deweloperów)

Zarządzanie przesyłaniem plików i tworzenie dokumentów PDF to standardowe wymagania wielu aplikacji w obecnym środowisku programowania internetowego. Podsumowując możliwości IronPDF i Multer w środowisku Node.js, otrzymujemy solidne rozwiązanie pozwalające skutecznie sprostać tym wymaganiom.

Multer to oprogramowanie pośredniczące (middleware) dla Node.js, które ułatwia obsługę danych typu multipart/form-data — wykorzystywanych głównie do przesyłania plików. Dzięki dużej elastyczności programiści mogą określać ograniczenia rozmiaru plików, opcje przechowywania oraz filtrowanie plików, aby zagwarantować bezpieczne i skuteczne przesyłanie plików. Multer to najlepszy wybór dla programistów, którzy chcą w prosty sposób zintegrować funkcję przesyłania plików ze swoimi aplikacjami, ponieważ integracja z Express.js jest niezwykle prosta.

Z kolei IronPDF to potężna biblioteka do tworzenia plików PDF, która umożliwia programistom tworzenie dokumentów PDF przy użyciu tekstu HTML. Dzięki wielu funkcjom, w tym obsłudze wykonywania kodu JavaScript, stylizacji CSS oraz osadzania czcionek i obrazów, jest to idealne narzędzie do przekształcania dynamicznych informacji internetowych w profesjonalnie wyglądające pliki PDF.

Zademonstrujemy płynną współpracę między tymi dwoma potężnymi narzędziami, omawiając sposób konfiguracji i wykorzystania IronPDF do tworzenia dokumentów PDF oraz Multer do zarządzania przesyłaniem plików w aplikacji Node.js.

Czym jest Multer Node.js?

Multer to oprogramowanie pośredniczące (middleware) dla Node.js, które ułatwia obsługę danych typu multipart/form-data — wykorzystywanych głównie do przesyłania plików. Oferuje niezawodną metodę obsługi funkcji przesyłania plików w aplikacjach internetowych i z łatwością integruje się z Express.js. Aby zapewnić, że przesyłane są wyłącznie dozwolone typy plików, Multer umożliwia programistom określenie ograniczeń dotyczących rozmiaru plików, skonfigurowanie opcji przechowywania oraz zastosowanie filtrowania plików.

Zapewnia to serwerowi elastyczność w zarządzaniu plikami poprzez obsługę zarówno pamięci dyskowej, jak i pamięci operacyjnej. Multer doskonale nadaje się również do formularzy, które wymagają jednoczesnego przesłania wielu plików, ponieważ obsługuje jednoczesne przesyłanie kilku plików. Podsumowując, Multer usprawnia proces przesyłania plików, zwiększając zdolność aplikacji Node.js do bezpiecznego i efektywnego przetwarzania materiałów przesłanych przez użytkowników.

Multer Node.js (Jak to działa dla programistów): Rysunek 1 – Multer Node.js

Funkcje Multer dla Node.js

Opcje przechowywania plików

  • Multer umożliwia zapisywanie przesłanych plików bezpośrednio na dysku. Silnik przechowywania na dysku pozwala podać nazwę pliku i katalog docelowy. Jest to szczególnie przydatne w przypadku programów, które wymagają zapisywania plików do wykorzystania w przyszłości.
  • Pamięć: Multer umożliwia przechowywanie plików w pamięci jako obiekty buforowe do chwilowego użytku. Jest to pomocne w sytuacjach, gdy pliki nie muszą być przechowywane na dysku i mogą być przetwarzane od razu.

Ograniczenia dotyczące rozmiaru plików

Ograniczenia rozmiaru, które Multer pozwala ustawić dla przesyłanych plików, mogą pomóc w ochronie wydajności serwera i efektywnym zarządzaniu zasobami pamięci masowej poprzez zapobieganie przesyłaniu plików, które są zbyt duże. Aby to osiągnąć, można skorzystać z opcji ograniczeń.

Filtrowanie plików

Multer posiada opcję fileFilter, która pozwala zarządzać tym, które pliki są akceptowane. Pliki, które nie spełniają wymagań, mogą zostać odrzucone przez tę funkcję, która może również zweryfikować typ MIME pliku i inne atrybuty. Gwarantuje to, że przesyłane są wyłącznie określone rodzaje plików — takie jak dokumenty i obrazy.

Obsługa wielu plików

Multer może zarządzać kilkoma plikami przesłanymi jednocześnie. Trasy można skonfigurować tak, aby akceptowały wiele pól zawierających pliki lub tablice plików. Jest to przydatne w formularzach, w których użytkownicy muszą przesłać wiele plików jednocześnie, takich jak dokumenty uzupełniające i zdjęcia profilowe.

Konfigurowalne silniki przechowywania danych

Multer pozwala projektować nowe silniki przechowywania danych oprócz wbudowanych rozwiązań do przechowywania na dysku i w pamięci. Aby uzyskać optymalną elastyczność, możesz stworzyć własną logikę zarządzania przesyłaniem plików, w tym określić, gdzie i w jaki sposób pliki są zapisywane.

Łatwa integracja z Express

Multer został stworzony z myślą o łatwej integracji z Express.js. Dodanie funkcji przesyłania plików do aplikacji internetowych jest proste dzięki wykorzystaniu tej biblioteki jako oprogramowania pośredniczącego w trasach Express.

Automatyczna obsługa danych wieloczęściowych

Dzięki automatycznemu parsowaniu danych typu multipart/form-data, Multer upraszcza proces obsługi przesyłania plików w kodzie po stronie serwera, udostępniając przesłane pliki i dane formularza w obiekcie req.

Przesyłanie pojedynczych i wielu plików

Multer oferuje kilka sposobów (pojedynczy, tablica i pola) zarządzania przesyłaniem jednego lub więcej plików. Metoda pojedyncza obsługuje jeden plik na żądanie, metoda tablicowa obsługuje kilka plików o tej samej nazwie pola, a metoda pól może obsługiwać wiele plików o różnych nazwach pól.

Utwórz i skonfiguruj Multer Node.js JS

Poniższe kroki można wykorzystać do skompilowania i skonfigurowania biblioteki Multer w aplikacji Node.js:

Zainstaluj zależności

Pierwszym krokiem jest instalacja Multer i Express. Można do tego użyć npm:

npm install multer
npm install express
npm install multer
npm install express
SHELL

Skonfiguruj Multer

Skonfiguruj Multer do obsługi przesyłania plików w pliku .js. Oto szczegółowa ilustracja:

const express = require('express');
const multer = require('multer');
const path = require('path');
const fs = require('fs');

// Initialize Express
const app = express();

// Set up storage configuration for Multer
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'uploads/'); // Directory to save uploaded files
  },
  filename: (req, file, cb) => {
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname)); // Unique filename
  }
});

// Configure file filter function to allow only certain file types
const fileFilter = (req, file, cb) => {
  const allowedFileTypes = /jpeg|jpg|png|gif/;
  const mimetype = allowedFileTypes.test(file.mimetype);
  const extname = allowedFileTypes.test(path.extname(file.originalname).toLowerCase());
  if (mimetype && extname) {
    return cb(null, true);
  } else {
    cb(new Error('Only images are allowed!'));
  }
};

// Initialize Multer with storage, file size limit, and file filter options
const upload = multer({
  storage: storage,
  limits: { fileSize: 1024 * 1024 * 5 }, // 5 MB file size limit
  fileFilter: fileFilter
});

// Single file upload route
app.post('/upload-single', upload.single('profilePic'), (req, res) => {
  try {
    res.send('Single file uploaded successfully');
  } catch (err) {
    res.status(400).send({ error: err.message });
  }
});

// Multiple files upload route
app.post('/upload-multiple', upload.array('photos', 5), (req, res) => {
  try {
    res.send('Multiple files uploaded successfully');
  } catch (err) {
    res.status(400).send({ error: err.message });
  }
});

// Error handling middleware
app.use((err, req, res, next) => {
  if (err) {
    res.status(400).send({ error: err.message });
  }
});

// Start the server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
const express = require('express');
const multer = require('multer');
const path = require('path');
const fs = require('fs');

// Initialize Express
const app = express();

// Set up storage configuration for Multer
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'uploads/'); // Directory to save uploaded files
  },
  filename: (req, file, cb) => {
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname)); // Unique filename
  }
});

// Configure file filter function to allow only certain file types
const fileFilter = (req, file, cb) => {
  const allowedFileTypes = /jpeg|jpg|png|gif/;
  const mimetype = allowedFileTypes.test(file.mimetype);
  const extname = allowedFileTypes.test(path.extname(file.originalname).toLowerCase());
  if (mimetype && extname) {
    return cb(null, true);
  } else {
    cb(new Error('Only images are allowed!'));
  }
};

// Initialize Multer with storage, file size limit, and file filter options
const upload = multer({
  storage: storage,
  limits: { fileSize: 1024 * 1024 * 5 }, // 5 MB file size limit
  fileFilter: fileFilter
});

// Single file upload route
app.post('/upload-single', upload.single('profilePic'), (req, res) => {
  try {
    res.send('Single file uploaded successfully');
  } catch (err) {
    res.status(400).send({ error: err.message });
  }
});

// Multiple files upload route
app.post('/upload-multiple', upload.array('photos', 5), (req, res) => {
  try {
    res.send('Multiple files uploaded successfully');
  } catch (err) {
    res.status(400).send({ error: err.message });
  }
});

// Error handling middleware
app.use((err, req, res, next) => {
  if (err) {
    res.status(400).send({ error: err.message });
  }
});

// Start the server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
JAVASCRIPT

Multer Node.js (Jak to działa dla programistów): Rysunek 2 – Aplikacja MulterNode.js wykorzystująca Multer do przesyłania plików

Skonfiguruj system pamięci masowej

  • miejsce docelowe: Wskazuje folder, w którym będą przechowywane przesłane pliki.
  • nazwa_pliku: Zachowuje oryginalne rozszerzenie pliku, tworząc jednocześnie unikalną nazwę dla każdego przesłanego pliku na podstawie sygnatury czasowej i losowej liczby.
  • Filtr plików: opcja umożliwiająca weryfikację typu plików, które są przesyłane. W tym przykładzie dozwolone są wyłącznie pliki graficzne z rozszerzeniami jpeg, jpg, png lub gif.

Inicjalizacja Multer:

  • storage: Opisuje konfigurację pamięci masowej.
  • limits: Określa maksymalny dopuszczalny rozmiar pliku (w tym przykładzie 5 MB).
  • fileFilter: Wykorzystuje funkcję filtru plików.

Pierwsze kroki z IronPDF

Gdy IronPDF służy do tworzenia dokumentów PDF, a Multer do obsługi przesyłania plików, powstaje potężne rozwiązanie do zarządzania treściami generowanymi przez użytkowników i przekształcania ich w dopracowane pliki PDF. Poniżej znajduje się wyjaśnienie, jak zainstalować i połączyć te dwie biblioteki w aplikacji Node.js.

Czym jest IronPDF?

IronPDF to zestaw bibliotek aplikacji zaprojektowanych w celu ułatwienia tworzenia, edycji i zarządzania plikami PDF. Dzięki tej aplikacji programiści mogą wyodrębniać tekst i obrazy z dokumentów HTML, dodawać nagłówki i znaki wodne, łączyć wiele stron PDF oraz wykonywać wiele innych czynności. Kompleksowa dokumentacja IronPDF i przyjazny dla użytkownika interfejs API ułatwiają programistom automatyczne generowanie wysokiej jakości dokumentów PDF. IronPDF zawiera wszystkie funkcje i możliwości niezbędne do usprawnienia przepływu pracy z dokumentami i zapewnienia najwyższej jakości obsługi użytkownika w różnych scenariuszach, takich jak tworzenie dokumentacji, raportów i faktur.

Multer Node.js (Jak to działa dla programistów): Rysunek 3 – IronPDF for Node.js: Biblioteka PDF dla Node.js

Funkcje IronPDF

Szybką i prostą metodą radzenia sobie z dowolnym tekstem HTML, w tym CSS i JavaScript, jest konwersja go do formatu PDF.

Łączenie plików PDF: Aby ułatwić zarządzanie dokumentami, połącz wiele dokumentów PDF w jeden plik PDF.

Ekstrakcja tekstu i obrazów: Wyodrębnianie tekstu i obrazów z plików PDF w celu wykorzystania ich do dalszego przetwarzania lub analizy danych.

Znak wodny: Ze względów bezpieczeństwa lub wizerunkowych można dodawać tekstowe lub graficzne znaki wodne do stron PDF.

Dodaj nagłówek i stopkę: Nagłówki i stopki dokumentów PDF pozwalają na dodanie spersonalizowanej wiadomości lub numerów stron.

Zainstaluj IronPDF

Użyj menedżera pakietów Node, aby zainstalować wymagane pakiety Node.js i włączyć funkcjonalność IronPDF.

npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
SHELL

Zintegruj Multer Node.js z IronPDF

Zmodyfikuj app.js, aby skonfigurować IronPDF do tworzenia plików PDF oraz Multer do obsługi przesyłania plików.

const express = require('express');
const multer = require('multer');
const path = require('path');
const IronPdf = require('@ironsoftware/ironpdf');
const document = IronPdf.PdfDocument;
var config = IronPdf.IronPdfGlobalConfig;

// Initialize Express
const app = express();

// Set up Multer storage configuration
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'uploads/'); // Directory to save uploaded files
  },
  filename: (req, file, cb) => {
    cb(null, `${Date.now()}-${file.originalname}`); // Unique filename
  }
});

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

// Single file upload route
app.post('/upload-single', upload.single('file'), async (req, res) => {
  try {
    // Read the uploaded file
    const filePath = path.join(__dirname, 'uploads', req.file.filename);

    // Create HTML content for PDF
    const htmlContent = `
      <html>
        <head>
          <title>Uploaded File Content</title>
        </head>
        <body>
          <h1>Uploaded File Content</h1>
          <img src="${filePath}" alt="image" width="500" height="600">
        </body>
      </html>
    `;

    // Initialize IronPDF
    const pdf = await document.fromHtml(htmlContent);

    // Save PDF to file
    const pdfPath = path.join(__dirname, 'uploads', `${Date.now()}-output.pdf`);
    await pdf.saveAs(pdfPath);

    // Respond to the client
    res.send(`File uploaded and PDF generated successfully! <a href="/download-pdf?path=${pdfPath}">Download PDF</a>`);
  } catch (err) {
    res.status(500).send({ error: err.message });
  }
});

// Route to download generated PDF
app.get('/download-pdf', (req, res) => {
  const filename = req.query.path;
  res.download(filename);
});

// Start the server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
const express = require('express');
const multer = require('multer');
const path = require('path');
const IronPdf = require('@ironsoftware/ironpdf');
const document = IronPdf.PdfDocument;
var config = IronPdf.IronPdfGlobalConfig;

// Initialize Express
const app = express();

// Set up Multer storage configuration
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'uploads/'); // Directory to save uploaded files
  },
  filename: (req, file, cb) => {
    cb(null, `${Date.now()}-${file.originalname}`); // Unique filename
  }
});

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

// Single file upload route
app.post('/upload-single', upload.single('file'), async (req, res) => {
  try {
    // Read the uploaded file
    const filePath = path.join(__dirname, 'uploads', req.file.filename);

    // Create HTML content for PDF
    const htmlContent = `
      <html>
        <head>
          <title>Uploaded File Content</title>
        </head>
        <body>
          <h1>Uploaded File Content</h1>
          <img src="${filePath}" alt="image" width="500" height="600">
        </body>
      </html>
    `;

    // Initialize IronPDF
    const pdf = await document.fromHtml(htmlContent);

    // Save PDF to file
    const pdfPath = path.join(__dirname, 'uploads', `${Date.now()}-output.pdf`);
    await pdf.saveAs(pdfPath);

    // Respond to the client
    res.send(`File uploaded and PDF generated successfully! <a href="/download-pdf?path=${pdfPath}">Download PDF</a>`);
  } catch (err) {
    res.status(500).send({ error: err.message });
  }
});

// Route to download generated PDF
app.get('/download-pdf', (req, res) => {
  const filename = req.query.path;
  res.download(filename);
});

// Start the server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
JAVASCRIPT

W dostarczonym kodzie Node.js integrujemy Multer i IronPDF, aby zbudować niezawodny system do zarządzania przesyłaniem plików i tworzenia dokumentów PDF. Konfigurujemy Multer z konfiguracją pamięci dyskowej, aby obsługiwał przesyłanie plików typu multipart/form-data przy użyciu frameworka Express, nadając każdemu przesłanemu plikowi unikalną nazwę i katalog docelowy. Multer zapisuje pliki przesłane przez użytkowników za pośrednictwem trasy /upload-single, a serwer sprawdza zawartość tych plików.

Multer Node.js (Jak to działa dla programistów): Rysunek 4 – Przesyłanie plików za pomocą Multer, a następnie dodanie przesłanego pliku (obrazu .jpg) do treści HTML i konwersja go do formatu PDF za pomocą IronPDF

Następnie treść ta zostanie wkomponowana w podstawowy szablon HTML. Ten kod HTML jest wprowadzany do IronPDF, który tworzy plik PDF przechowywany w katalogu uploads. Na końcu serwer udostępnia link do pobrania wygenerowanego pliku PDF. Ta integracja pokazuje, jak skutecznie Multer radzi sobie z przesyłaniem plików, a IronPDF konwertuje je na wysokiej jakości pliki PDF, zapewniając płynne zarządzanie plikami i tworzenie dokumentów w aplikacji Node.js.

Multer Node.js (Jak to działa dla programistów): Rysunek 5 – Wygenerowany plik PDF przy użyciu IronPDF

Wnioski

Podsumowując, kompletne rozwiązanie do organizowania treści generowanych przez użytkowników i przekształcania ich w dopracowane dokumenty zapewnia integracja biblioteki Multer do przesyłania plików z biblioteką IronPDF for Node.js do generowania plików PDF w aplikacji Node.js. Dzięki funkcjom takim jak ograniczenia rozmiaru, filtrowanie plików i konfiguracja przechowywania plików, Multer ułatwia zarządzanie przesyłaniem plików. Z drugiej strony IronPDF oferuje opcje dostosowywania i obsługę różnych elementów stylistycznych, umożliwiając konwersję informacji HTML na wysokiej jakości dokumenty PDF.

Te dwie biblioteki można połączyć w celu tworzenia elastycznych aplikacji, które pozwalają użytkownikom przesyłać pliki i automatycznie przekształcać je w estetyczne dokumenty PDF. Ta integracja zwiększa wydajność operacji generowania dokumentów i poprawia komfort użytkowania poprzez usprawnienie procesu tworzenia faktur, certyfikatów, raportów i innych dokumentów.

Dostarczanie bogatych w funkcje, wysokiej jakości rozwiązań programowych dla klientów i użytkowników końcowych stało się łatwiejsze dzięki integracji IronPDF ze stosem programistycznym aplikacji Enterprise. Ponadto te solidne podstawy ułatwią realizację projektów, tworzenie systemów backendowych oraz usprawnianie procesów.

IronPDF.

Dowiedz się więcej o innych produktach Iron Software. Ze względu na bogatą dokumentację, prężną społeczność programistów online oraz częste aktualizacje technologie te stanowią doskonały wybór dla współczesnych projektów programistycznych.

Darrius Serrant
Full Stack Software Engineer (WebOps)

Darrius Serrant posiada tytuł licencjata z informatyki z Uniwersytetu Miami i pracuje jako Full Stack WebOps Marketing Engineer w Iron Software. Już od młodych lat zainteresował się kodowaniem, postrzegając informatykę jako zarówno tajemniczą, jak i dostępną, co czyni ją doskonałym medium dla kreatywności ...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie