【发布时间】:2017-10-30 13:32:40
【问题描述】:
我在 Node 和 Express 中有一个 API,它从客户端(开发中的邮递员)接收文件,我使用 multer 将文件存储在内存中,如下所示:
router.post('/api/v1/upload', contrl.upload, contrl.uploadFile);
然后在我的控制器中:
exports upload = multer({ storage: multer.memoryStorage() }).single('file');
现在我可以使用 req.file.buffer 访问该文件,但是我想将同一个文件发送到另一个 API。
我正在使用request-promise-native,所以这将是这样的:
const rp = require('request-promise-native')
exports.uploadFile = (req, res) => {
const options = {
method: 'POST',
uri: `${uri}`,
form: {
file: req.file.buffer
}
}
rp(options)
.then(parsedBody => {
return res.status(201).send(parsedBody);
})
.catch(err => res.status(400).send(err));
}
为简单起见,我删除了一些其他参数,但这不起作用,可能是因为 Node 不知道如何处理 req.file.buffer 中的信息。
编辑。 好的,经过一些测试后,我尝试使用真实文件而不是使用 multer memoryStorage。所以我得到了这个:
exports upload = multer({ dest: 'uploads/' }).single('file');
将文件保存到磁盘,然后
const request = require('request')
exports.uploadFile = (req, res) => {
const formData = {
file: fs.createReadStream('uploads/' + req.file.filename)
}
const options = {
url: `${uri}`
formData
}
request.post(options, (err, response, body) => {
if (err) return res.status(400).send(err);
return res.status(201).send(response);
});
}
它有效!但是当我在 multer 中更改为 memoryStorage 并改用 file: req.file.buffer 时,它不起作用。
EDIT2:我还尝试在内存中将文件作为流发送,所以我尝试了这个
const bufferStream = new stream.PassThrough();
bufferStream.end(req.file.buffer);
然后用file: bufferStream 在formData 中传递它,但也不起作用。
我怎样才能做到这一点? 谢谢
【问题讨论】:
标签: node.js express file-upload multer