我尝试通过流将图像上传到我的Hapijs服务器,并将数据发送(传输)到另一个Hapijs实例。
所以我有这个帖子,它应该接收一个流并转发它:
this.server.route({
method: "POST",
path: RouteManager.Routes.SearchRoute.User.Icon.post,
config: {
payload: {
output: 'stream',
parse: true,
allow: 'multipart/form-data',
maxBytes: 4194304 //4MB
},
handler: (request, reply) => {
const data = request.payload.image;
const req = require("request").post("myOtherServer.com" + "/upload",
{
formData: {
image: data
}
}, (err, httpResp, body) => {
cb(err, JSON.parse(body));
});
}
}
})
我在另一台服务器上的路由如下所示:
this.hapi.route({
method: 'POST',
path: Routes.index.child.upload.post,
config: {
payload: {
output: 'stream',
parse: true,
allow: 'multipart/form-data',
maxBytes: 4194304 //4MB
}
}
},
handler: (request, reply) => {
this.workWithStream(request, reply);
}
});
当我运行代码时,我总是得到这个回复:
{
"statusCode": 400,
"error": "Bad Request",
"message": "Invalid multipart payload format"
}
如何将流转发到另一个hapijs服务器(不保存临时文件)?
由于
答案 0 :(得分:0)
这是插件h2o2可用于的事情。
像任何其他插件一样注册它:
server.register({
register: require('h2o2')
}, function (err) {
if (err) {
console.log('Failed to load h2o2');
}
server.start(function (err) {
console.log('Server started at: ' + server.info.uri);
});
});
然后,以下路由将开始将流转发到您的其他服务器:
{
method: 'POST',
path: '/upload',
config: {
payload: {
output: 'stream',
parse: false,
allow: 'multipart/form-data',
maxBytes: 4194304
},
auth: false
},
handler: {
proxy: {
host: 'your.remote.server',
port: 'your-remote-port',
protocol: 'http'
}
}
}
要使代理生效,parse
必须在代理服务器上设置为false
,但可以在实际处理文件的服务器上设置为true
。
要使此示例正常工作,两台服务器上的路径必须相同。