节点帮助

Multer Node.js(开发者如何使用)

发布 2024年九月29日
分享:

介绍

在当前在线开发环境中,管理文件上传和生成PDF文档是许多应用程序的标准需求。 总结...的能力IronPDFMulter在 Node.js 环境中提供了一个强大的解决方案,可以有效地处理这些需求。

Multer是一种 Node.js 中间件,使处理 multipart/form-data(主要用于文件上传)更加容易。 由于它的高度灵活性,开发者可以指定文件大小限制、存储选项和文件过滤,以确保文件上传的安全和高效。 Multer 是开发人员希望将文件上传功能轻松集成到其应用程序中的首选选项,因为它可以轻松与 Express.js 集成。

相反,IronPDF是一个强大的PDF创建库,使程序员能够使用HTML文本创建PDF文档。 其多种功能包括支持JavaScript执行、CSS样式以及字体和图像嵌入,是将动态网页信息转换为专业PDF文档的理想工具。

我们将展示这两个强大工具之间的顺利协作,介绍如何在 Node.js 应用程序中设置和使用 IronPDF 来创建 PDF 文档,以及使用 Multer 来管理文件上传。

Multer Node.js 是什么?

Multer是一个Node.js中间件,使处理multipart/form-data(主要用于文件上传)变得更容易。 它提供了一种可靠的方法,可轻松处理Web应用程序中的文件上传功能,并与Express.js接口对接。 为了确保只有授权的文件类型被上传,Multer为开发者提供了指定文件大小限制、配置存储选项和应用文件过滤的能力。

它通过支持磁盘和内存存储为服务器提供了管理文件的灵活性。 Multer 也是处理需要同时提交多个文件的表单的理想选择,因为它可以处理一次上传的多个文件。 总的来说,Multer 简化了文件上传过程,提高了 Node.js 应用程序安全有效地处理用户上传素材的能力。

Multer Node.js(开发人员如何使用):图 1 - Multer Node.js

Multer for Node.js 的特性

文件存储选项

  • Multer 可以直接将上传的文件存储到磁盘。 磁盘存储引擎允许您提供文件名和目标目录。 这对于需要将文件保存以供将来使用的程序特别有帮助。
  • 内存存储:Multer能够将文件作为缓冲对象存储在内存中以供暂时使用。 这在文件不需要保存在磁盘上并且可以立即处理的情况下非常有用。

文件大小限制

Multer允许你为上传文件设定的大小限制可以帮助保护服务器性能,并通过防止上传过大的文件来高效管理存储资源。 您可以使用限制选项来完成此操作。

文件过滤器

Multer有一个fileFilter选项,可以让您管理哪些文件被接受。 不符合要求的文件可能会被此功能拒绝,此功能还可以验证文件的MIME类型和其他属性。 这保证只有特定类型的文件——如文档和图像——被提交。

处理多个文件

Multer能够同时管理多个文件上传。 可以设置路由以接受包含文件或文件数组的多个字段。 这对于用户需要一次上传多个文件(例如支持文件和个人资料图片)的表单非常有用。

可定制的存储引擎

Multer允许您在内置的磁盘和内存存储解决方案之外设计新的存储引擎。 为了获得最佳的灵活性,您可以构建自己的逻辑来管理文件上传,包括文件保存的位置和方式。

轻松与Express集成

Multer 是为与 Express.js 轻松集成而设计的。 通过在 Express 路由中将其用作中间件,可以轻松为您的 web 应用程序添加文件上传功能。

自动处理多部分数据

通过自动解析 multipart/form-data,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
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install multer npm install express
VB   C#

配置 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}`);
});
Private const express = require( 'express');
Private const multer = require( 'multer');
Private const path = require( 'path');
Private const fs = require( 'fs');
' Initialize Express
Private const app = express()
' Set up storage configuration for Multer
Private const storage = multer.diskStorage({ destination:= (req, file, cb) =>
	cb(Nothing, 'uploads/');
'INSTANT VB TODO TASK: Lambda expressions and anonymous methods are not converted by Instant VB if local variables of the outer method are referenced within the anonymous method:
, filename: (req, file, cb) =>
' Configure file filter function to allow only certain file types
'INSTANT VB TODO TASK: Lambda expressions and anonymous methods are not converted by Instant VB if local variables of the outer method are referenced within the anonymous method:
const fileFilter = (req, file, cb) =>
If True Then
'INSTANT VB WARNING: Instant VB cannot determine whether both operands of this division are integer types - if they are then you should use the VB integer division operator:
  const allowedFileTypes = /jpeg jpg png gif/
  const mimetype = allowedFileTypes.test(file.mimetype)
  const extname = allowedFileTypes.test(path.extname(file.originalname).toLowerCase())
  If mimetype AndAlso extname Then
	Return cb(Nothing, True)
  Else
	cb(New [Error]( 'Only images are allowed!'));
  End If
End If
' Initialize Multer with storage, file size limit, and file filter options
const upload = multer({
	storage:= storage,
	limits:= { fileSize:= 1024 * 1024 * 5 },
	fileFilter:= fileFilter
})
' Single file upload route
app.post( '/upload-@single', upload.@single('profilePic'), (req, res) =>
If True Then
	Try
		res.send( 'Single file uploaded successfully');
	Catch e1 As err
		res.status(400).send({ [error]:= err.message })
	End Try
End If
)
' Multiple files upload route
app.post( '/upload-multiple', upload.array('photos', 5), (req, res) =>
If True Then
	Try
		res.send( 'Multiple files uploaded successfully');
	Catch e2 As err
		res.status(400).send({ [error]:= err.message })
	End Try
End If
)
' Error handling middleware
'INSTANT VB TODO TASK: Lambda expressions and anonymous methods are not converted by Instant VB if local variables of the outer method are referenced within the anonymous method:
app.use((err, req, res, [next]) =>
' Start the server
const PORT = process.env.PORT 3000
'INSTANT VB TODO TASK: Lambda expressions and anonymous methods are not converted by Instant VB if local variables of the outer method are referenced within the anonymous method:
app.listen(PORT, () =>
VB   C#

Multer Node.js(它如何为开发者工作):图2 - MulterNode.js应用程序使用Multer上传文件

配置存储系统

destination: 指定上传文件将存储的文件夹。

filename: 在创建每个上传文件的唯一文件名时保持原始文件扩展名,该文件名基于时间戳和随机数。

文件筛选器:用于验证上传文件的文件类型的选项。 在此示例中,仅允许扩展名为 jpeg、jpg、png 或 gif 的图像文件。

初始化 Multer:

  • 存储:描述存储的设置。
  • 限制:定义允许的最大文件大小(在此示例中为 5 MB).
  • fileFilter:使用文件过滤器的功能。

IronPDF 入门

IronPDF用于制作 PDF 文档和Multer用于处理文件上传,一个强大的解决方案可以管理用户生成的内容并将其转换为精美的PDF。 关于如何在 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.js包,以启用IronPDF功能。

npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install @ironsoftware/ironpdf
VB   C#

将 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.filename;
    const pdfPath = path.join(__dirname, 'uploads', filename);
    res.download(pdfPath);
  });
// 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.filename;
    const pdfPath = path.join(__dirname, 'uploads', filename);
    res.download(pdfPath);
  });
// 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
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: var config=IronPdf.IronPdfGlobalConfig const app = express();
IronPdf.IronPdfGlobalConfig Const app = express()
Dim config As Dim=IronPdf.IronPdfGlobalConfig Const app
' Set up Multer storage configuration
'INSTANT VB TODO TASK: Lambda expressions and anonymous methods are not converted by Instant VB if local variables of the outer method are referenced within the anonymous method:
const storage = multer.diskStorage({ destination:= (req, file, cb) =>
If True Then
	cb(Nothing, 'uploads/');
End If
'INSTANT VB TODO TASK: Lambda expressions and anonymous methods are not converted by Instant VB if local variables of the outer method are referenced within the anonymous method:
, filename: (req, file, cb) =>
const upload = multer({ storage:= storage })
' Single file upload route
app.post( '/upload-@single', upload.@single('file'), async(req, res) =>
If True Then
	Try
		const filePath = path.join(__dirname, 'uploads', req.file.filename);
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: 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> `;
		"500" height="600"> </body> </html> `
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: const htmlContent = ` <html> <head> <title> Uploaded File Content</title> </head> <body> <h1> Uploaded File Content</h1> <img src="${filePath}" alt="image" width="500" height
		"image" width="500" height
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: const htmlContent = ` <html> <head> <title> Uploaded File Content</title> </head> <body> <h1> Uploaded File Content</h1> <img src="${filePath}" alt="image" width
		"${filePath}" alt="image" width
'INSTANT VB TODO TASK: The following line contains an assignment within expression that was not extracted by Instant VB:
'ORIGINAL LINE: const htmlContent = ` <html> <head> <title> Uploaded File Content</title> </head> <body> <h1> Uploaded File Content</h1> <img src="${filePath}" alt
		const htmlContent = ` (Of html) (Of head) (Of title) Uploaded File Content</title> </head> (Of body) (Of h1) Uploaded File Content</h1> <img src="${filePath}" alt
		const pdf = Await document.fromHtml(htmlContent)
		const pdfPath = path.join(__dirname, 'uploads', `${@Date.now()}-output.pdf`);
		Await pdf.saveAs(pdfPath)
'INSTANT VB TODO TASK: The following line contains an assignment within expression that was not extracted by Instant VB:
'ORIGINAL LINE: res.send(`File uploaded and PDF generated successfully! <a href="/download-pdf?path=${pdfPath}"> Download PDF</a>`);
		res.send(`File uploaded [and] PDF generated successfully!<a href="/download-pdf?path=${pdfPath}"> Download PDF</a>`)
	Catch e1 As err
		res.status(500).send({ [error]:= err.message })
	End Try
End If
)
' Route to download generated PDF
  app.get( '/download-pdf', (req, res) =>
  If True Then
	  const filename = req.query.filename
	  const pdfPath = path.join(__dirname, 'uploads', filename);
	  res.download(pdfPath)
  End If
  )
' Start the server
const PORT = process.env.PORT 3000
'INSTANT VB TODO TASK: Lambda expressions and anonymous methods are not converted by Instant VB if local variables of the outer method are referenced within the anonymous method:
app.listen(PORT, () =>
VB   C#

我们在提供的 Node.js 代码中集成了 Multer 和 IronPDF,以构建一个可靠的文件上传和 PDF 文档生成系统。 我们使用磁盘存储配置配置Multer,以便使用Express框架处理multipart/form-data文件上传,给每个上传的文件分配一个唯一的文件名和目标目录。 Multer通过/upload-single路由保存用户上传的文件,服务器会检查这些文件的内容。

Multer Node.js(开发人员如何使用):图 4 - 使用 Multer 上传文件,然后将上传的文件(.jpg 图像)添加到 HTML 内容中,并使用 IronPDF 将其转换为 PDF。

然后,将此内容集成到一个基本的HTML模板中。 将此 HTML 输入到 IronPDF, 创建 PDF 文件存储在uploads目录中。 最后,服务器会提供一个用于下载生成的PDF的链接。 此集成演示了Multer如何有效处理文件上传,以及IronPDF如何将这些上传转换为高质量的PDF,以在Node.js应用程序中提供流畅的文件管理和文档创建。

Multer Node.js(开发者指南):图5 - 使用IronPDF生成的输出PDF

结论

总之,通过集成提供了一套完整的解决方案,用于组织用户生成的内容并将其转化为完善的文档。Multer用于文件上传与IronPDF用于在 Node.js 应用程序中生成 PDF。 借助大小限制、文件过滤和文件存储配置等功能,Multer 让文件上传管理变得更加简单。 另一方面,IronPDF 提供自定义选项和对多种样式元素的支持,使得可以转换HTML信息转换为高质量的PDF文档。

这两个库可以结合使用,以创建灵活的应用程序,让用户提交文件并将其自动转换为美观的PDF文档。 此集成通过简化生成发票、证书、报告等的流程,提高了文档生成操作的效率,改善了用户体验。

通过集成,为客户和终端用户提供功能丰富的高级软件解决方案变得更加容易。IronPDF并将其集成到您的企业应用程序开发堆栈中。 此外,这一坚实的基础将促进项目、后台系统和流程改进。

IronPDF.

了解更多关于其他内容的信息Iron 软件产品. 因为它们丰富的文献资料,充满活力的在线开发者社区和频繁的修订,使这些技术成为现代软件开发项目的绝佳选择。

< 前一页
Node.js Fetch(对于开发人员如何工作)
下一步 >
uuid NPM(开发人员如何工作)

准备开始了吗? 版本: 2024.11 刚刚发布

免费 npm 安装 查看许可证 >