Node+Express 管道文件直接写入流

Node+Express pipe file directly to writeStream

在学习方面我需要自己制作一个文件上传 fs.streams

router.post('/upload', (req, res, next) => {
  req.pipe(fs.createWritableStream('files/file.png'))
    .on('error', (err) => next(err))
    .on('close', () => {
      res.json({image: 'files/file.png'});
    })
})

这是行不通的。那么两个问题


更新:在所有教程中描述了相反的操作 - 从 fspipe 读取文件到 res 最终用户。

你可以使用multer

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

router.post('/upload', upload.single('formField'), (req, res, next) => {
  res.json({image: req.file.path});
})

在此代码文件路径中将被发送。 如果你想发送文件本身,那么你应该写:

res.download(req.file.path);

而不是 res.json({image: req.file.path})

我不知道 res.download 是如何工作的。也许它会占用文件的整个缓冲区并发送它。

multer 的文档是 here