【发布时间】:2018-04-09 02:11:57
【问题描述】:
我有 2 个单独的 NodeJS API,它们使用 multer 将文件保存在 内存 中。
我的 express 中间件是这样的
import multer from 'multer';
const storage = multer.memoryStorage();
export default multer({ storage }).single('image');
我能够成功接收到保存在内存中的文件,所以我的 req.file.image 看起来像这样
{
fieldname: 'image',
originalname: 'image-2017-08-28-13-47-31-218.png',
encoding: '7bit', mimetype: 'image/png',
buffer: <Buffer 89 50 4e 47 0d 0a 1a 0 ... >,
size: 493181
}
收到文件后,在 first API 上,我需要将它发送到同样使用 multer 和 的 second API >快递
function secondApiReceiveImage(req, res) {
console.log(req.file)
console.log(req.files)
console.log(req.body)
res.send('ok');
}
我尝试使用以下实现发送
通过https://github.com/request/request#multipartform-data-multipart-form-uploads
import request from 'request';
function firstApiReceiveImage(req, res) {
const options = {
url:'http://SECOND_API/api/image',
formData: { image: req.file.buffer }
};
request.post(options, (err, httpResponse, body) => {
console.log('err', err);
console.log('body', body);
});
}
在这种情况下,req.file、req.files和req.body的日志都是未定义的 关于 secondApiReceiveImage API 处理函数
我的下一次尝试是https://github.com/form-data/form-data
import multer from 'multer';
const storage = multer.memoryStorage();
export default multer({ storage }).single('image');
function firstApiReceiveImage(req, res) {
const CRLF = '\r\n';
const form = new FormData();
const opts = {
header: `${CRLF} + '--' + ${form.getBoundary()} + ${CRLF} + 'X-Custom-Header: 123' + ${CRLF} + ${CRLF}`,
knownLength: 1
};
form.append('image', req.file.image.buffer, opts);
form.submit('http://SECOND_API/api/image', (err, res) => {
console.log('err', err);
console.log('res', res);
});
}
我得到了同样的结果,undefined for req.file, req.files & req.body在第二个 API 上
这些是我除了 multer BTW 之外的两个 API 的中间件
app.use(compression());
app.use(helmet());
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
如果我可以将文件保存在第一个 API 上,我本来可以过上更轻松的生活,但在这种情况下我们不能保存到磁盘:(
对我有什么建议吗?
【问题讨论】:
标签: node.js express file-upload multer