返回

前端上传与删除文件:Node.js实操指南

前端

Node.js 文件上传和删除的奥秘

前端开发中,文件上传和删除是必备技能。从上传用户头像到管理文件系统,Node.js 提供了强大的工具来轻松应对这些任务。

文件上传

单文件上传

要上传单个文件,请使用 multer 的 single() 方法。该方法接受表单中文件字段的字段名作为参数。

const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.single('avatar'), (req, res) => {
  console.log(req.file);
  res.send('文件上传成功!');
});

多文件上传

要上传多个文件,请使用 multer 的 array() 方法。该方法接受两个参数:字段名和允许上传的文件数量。

const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.array('photos', 10), (req, res) => {
  console.log(req.files);
  res.send('文件上传成功!');
});

文件删除

要删除文件,请使用 fs 模块的 unlink() 方法。该方法接受要删除的文件路径作为参数。

const fs = require('fs');

app.delete('/file/:filename', (req, res) => {
  const filename = req.params.filename;
  fs.unlink(`uploads/${filename}`, (err) => {
    if (err) {
      res.status(500).send('文件删除失败!');
    } else {
      res.send('文件删除成功!');
    }
  });
});

常见问题解答

1. 如何限制文件大小?

使用 multer 的 limits 选项。例如:

const multer = require('multer');
const upload = multer({ dest: 'uploads/', limits: { fileSize: 1000000 } });

2. 如何限制文件类型?

使用 multer 的 fileFilter 选项。例如:

const multer = require('multer');
const upload = multer({ dest: 'uploads/', fileFilter: (req, file, cb) => {
  if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
    cb(null, true);
  } else {
    cb(new Error('仅允许上传 JPEG 或 PNG 文件'), false);
  }
} });

3. 如何在 S3 等云存储上上传文件?

使用 multer-s3 或 aws-sdk 等库。

4. 如何处理异步文件上传?

使用 multer 的 single()array() 方法返回的 Promise。

5. 如何在上传后自定义文件名称?

使用 multer 的 filename 选项。例如:

const multer = require('multer');
const upload = multer({ dest: 'uploads/', filename: (req, file, cb) => {
  cb(null, Date.now() + '-' + file.originalname);
} });