跳過到頁腳內容
NODE 說明

Multer Node.js(開發者的使用方法)

在當前的線上開發環境中,管理文件上傳和生成 PDF 文件是許多應用程式的標準需求。 Summing up the capabilities of IronPDF and Multer in a Node.js environment yields a strong solution to effectively handle these requirements.

Multer 是一個 Node.js 的中介軟件,簡化了處理多部分表單數據,主要用於文件上傳。 由於其極大的靈活性,開發人員可以指定文件大小限制、存儲選項和文件過濾,以保證安全有效的文件上傳。 由於與 Express.js 的簡單整合,Multer 是開發人員希望簡單集成文件上傳功能到其應用程式的首選。

相反,IronPDF 是一個強大的 PDF 創建庫,允許程式員使用 HTML 文本創建 PDF 文件。 憑藉其多種功能,包括支持 JavaScript 執行、CSS 樣式以及字體和圖像嵌入,它是將動態網頁信息轉換為具有專業外觀的 PDF 的理想工具。

我們將通過討論如何在 Node.js 應用程式中設置和使用 IronPDF 來創建 PDF 文件以及 Multer 來管理文件上傳,以演示這兩個強大工具之間的無縫協作。

Multer Node.js 是什麼?

Multer 是 Node.js 的一個中介軟件,使得處理多部分表單數據——主要用於文件上傳——更加容易。 它提供了一種可靠的方法來處理網頁應用程式中的文件上傳能力,並輕鬆與 Express.js 進行界面聯絡。 為了確保只上傳授權的文件類型,Multer 使開發者能夠指定文件大小限制、配置存儲選項和應用文件過濾功能。

通過支持磁盤和內存存儲,它賦予服務器在管理文件方面的靈活性。 由於能夠同時處理多個文件上傳,Multer 也非常適合需要同時提交多個文件的表單。 總而言之,Multer 簡化了文件上傳過程,提高了 Node.js 應用程序安全有效地處理用戶上傳的材料的能力。

Multer Node.js(對開發者的工作原理):圖1 - Multer Node.js

Multer 對 Node.js 的特性

文件存儲選項

  • Multer 能夠將上傳的文件直接存儲到磁盤。 磁盤存儲引擎允許您提供文件名和目標目錄。 這對於需要將文件保留以供將來使用的程序特別有用。
  • 內存存儲:Multer 能夠將文件存儲在內存中作為緩衝對象以供臨時使用。 這在不需要將文件保存在磁盤上並可以立即處理的情況下非常有用。

文件大小限制

Multer 讓您對上傳的文件設置大小限制,從而通過防止上傳過大的文件來協助保護服務器性能並有效地管理存儲資源。 您可以使用限制選項來實現。

文件過濾

Multer 提供 fileFilter 選項,讓您可以管理接受哪些文件。 這一功能可以拒絕不符合要求的文件,並且可以驗證文件的 MIME 類型和其他屬性。 這保證只有特定類型的文件——如文件和圖片——被提交。

處理多個文件

Multer 可以管理同時上傳的多個文件。 路由可以設置為接受包含多個字段的文件或文件陣列。 這對於用戶必須一次上傳多個文件的表單很有幫助,例如支持文件和個人資料照片。

可定制的存儲引擎

除了內建的磁盤和內存存儲解決方案外,Multer 還允許您設計新的存儲引擎。 為了獲得最佳的靈活性,您可以建構自己的邏輯以管理文件上傳,包括文件的存儲地點及存儲方式。

與 Express 的簡單集成

Multer 是為了簡單地與 Express.js 整合而設計的。 通過在 Express 路由中作為中介件使用它,您可以輕鬆地將文件上傳功能添加到您的網頁應用程式中。

多部分數據的自動處理

通過自動解析多部分表單數據,Multer 簡化了在服務器端代碼中處理文件上傳的過程,讓上傳的文件和表單數據可用於 req 對象。

單文件和多文件上傳

Multer 提供多種方式(單個、陣列和字段)來管理單個或多個文件的上傳。 單個方法每個請求處理一個文件,陣列方法支持具有相同欄位名的多個文件,而字段方法可以處理具有不同欄位名的多個文件。

創建和配置 Multer Node.js JS

以下步驟可用於在 Node.js 程序中構建和設定 Multer

安裝依賴項

安裝 Multer 和 Express 是第一步。可以使用 npm 完成此操作:

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

配置 Multer

在您的 .js 文件中配置 Multer 以處理文件上傳。這是一個詳細的例子:

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(對開發者的工作原理):圖2 - 使用 Multer 的 MulterNode.js 應用進行文件上傳

配置存儲系統

  • 目的地: 指示上傳文件將存儲的文件夾。
  • 檔名:在創建唯一的上傳文件名稱時創建時間戳和隨機數,同時保持原始文件擴展名。
  • 文件過濾: 選擇一選項以驗證所上傳文件的文件類型。 在此範例中,只允許具有 jpeg、jpg、png 或 gif 擴展名的圖像文件。

初始化 Multer:

  • 存儲:描述存儲的配置。
  • 限制:定義允許的最大檔案大小(在本例中為 5 MB)。
  • 文件過濾器:使用文件過濾器的功能。

開始使用 IronPDF

When IronPDF is used to make PDF documents and Multer is used to handle file uploads, a potent solution for managing user-generated content and turning it into polished PDFs is created. 以下是如何在 Node.js 程式中安裝和組合這兩個庫的說明。

什麼是 IronPDF?

IronPDF 是一套應用程序庫,旨在促進 PDF 文件的創建、編輯和管理。 借助此應用程序,開發人員可以從 HTML 文檔中提取文本和圖像、添加標題和水印、合併多個 PDF 頁面,並執行各種其他任務。 IronPDF 的全面文檔和用戶友好的 API 讓開發人員能夠自動生成高質量的 PDF 文件。 IronPDF 包括所有必需的功能和特性,可在多種方案下優化文檔流程,例如創建文檔、報告和發票。

Multer Node.js(對開發者的工作原理):圖3 - IronPDF for Node.js:Node.js PDF 庫

IronPDF 的功能

處理任何類型的 HTML 文本的一個快速簡單的方法,包括 CSS 和 JavaScript,就是將其轉換為 PDF。

PDF 文件合併: 為了簡化文檔管理任務,合併多個 PDF 文檔成為單個 PDF 文件。

文本和圖像提取: 從 PDF 文件中提取文本和圖像,以便進一步進行數據處理或分析。

水印: 出於安全或品牌化的目的,您可以在 PDF 頁面上添加文本或圖片水印。

包含標題和頁腳: PDF 文檔的 標題和頁腳 允許您添加自定義消息或頁碼。

安裝 IronPDF

使用 node package manager 安裝所需的 Node.js 包以啟用 IronPDF 功能。

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

將 Multer Node.js 與 IronPDF 結合

修改 app.js 以設置 IronPDF 用以創建 PDF 和 Multer 以處理文件上傳。

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

在所提供的 Node.js 程式碼中,我們集成 Multer 和 IronPDF,以建立一個可靠的系統來管理文件上傳和生成 PDF 文件。 我們使用 Express 框架將 Multer 與磁盤存儲配置設置在一起,以處理多部分表單數據文件上傳,為每個上傳文件提供唯一的文件名和目標目錄。 Multer 通過 /upload-single 路由保存用戶上傳的文件,服務器檢查這些文件的內容。

Multer Node.js(對開發者的工作原理):圖4 - 使用 Multer 上傳文件,然後將上傳的文件(.jpg 圖片)添加到 HTML 內容中,並使用 IronPDF 將其轉換為 PDF

然後,這些內容會被集成到一個基本的 HTML 模板中。 這個 HTML 會被提供給 IronPDF,然後它 創建一個 PDF 文件,並存儲在上傳目錄中。 最後,服務器提供生成的 PDF 下載鏈接。 這種整合展示了 Multer 如何有效地處理文件上傳,而 IronPDF 則轉換這些上傳內容為高質量的 PDF,提供了在 Node.js 應用程式中流暢的文件管理和文檔創建過程。

Multer Node.js(對開發者的工作原理):圖5 - 使用 IronPDF 創建的輸出 PDF

結論

In conclusion, a complete solution for organizing user-generated content and turning it into polished papers is provided by integrating Multer for file uploads with IronPDF for PDF generation in a Node.js application. 借助像大小限制、文件過濾和文件存儲配置這樣的特性,Multer 簡化了文件上傳管理。 另一方面,IronPDF 提供了代碼自定義選項並支持多種樣式元素,讓它能夠 將 HTML 信息 轉換成高質量的 PDF 文件。

這兩個庫可以結合使用,創建靈活的應用,使用戶能夠提交文件並自動將其轉換為美觀的 PDF 文件。 此整合通過簡化發票、證書、報告等文件生成操作,提高了文件生成效率並提高了用戶體驗。

IronPDF 整合到您的企業應用開發棧中,使為客戶和終端用戶提供功能豐富、高質量的軟件解決方案變得更加容易。 而且,這個強大的基礎能夠推動項目、後台系統的促進及過程的改進。

IronPDF

了解更多關於其他Iron Software產品的信息。 由於其豐富的文檔、充滿活力的線上開發者社區和頻繁的更新,這些技術是當代軟件開發項目的極佳選擇。

Darrius Serrant
全棧軟件工程師 (WebOps)

Darrius Serrant 擁有邁阿密大學計算機科學學士學位,目前任職於 Iron Software 的全栈 WebOps 市場營銷工程師。從小就迷上編碼,他認為計算既神秘又可接近,是創意和解決問題的完美媒介。

在 Iron Software,Darrius 喜歡創造新事物,並簡化複雜概念以便於理解。作為我們的駐場開發者之一,他也自願教學生,分享他的專業知識給下一代。

對 Darrius 來說,工作令人滿意因為它被重視且有實際影響。