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'});
})
})
这是行不通的。那么两个问题
- 如何从req获取文件名和数据?
- 如何连接这两个流?
更新:在所有教程中描述了相反的操作 - 从 fs
和 pipe
读取文件到 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
在学习方面我需要自己制作一个文件上传 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'});
})
})
这是行不通的。那么两个问题
- 如何从req获取文件名和数据?
- 如何连接这两个流?
更新:在所有教程中描述了相反的操作 - 从 fs
和 pipe
读取文件到 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