0

我尝试通过流将图像上传到我的 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 服务器(不保存临时文件)?

谢谢

4

1 回答 1

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实际处理您的文件的服务器上设置为。

要使此示例正常工作,两台服务器上的路径必须相同。

于 2017-04-27T16:07:13.370 回答