2017-04-20 9 views
0

Je tente de télécharger une image sur mon serveur Hapijs via un flux et d'envoyer (transmettre) les données à une autre instance Hapijs.Hapijs Transfert d'un flux vers un autre serveur

J'ai donc cette route de poste, qui devrait recevoir un flux et le transmet:

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)); 
       }); 
       } 
      } 
     }) 

Mon itinéraire sur l'autre serveur ressemble à ceci:

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); 
      } 
     }); 

Quand je lance le code i toujours obtenir cette réponse:

{ 
    "statusCode": 400, 
    "error": "Bad Request", 
    "message": "Invalid multipart payload format" 
} 

Comment est-il possible de transmettre un flux vers un autre serveur hapijs (w sans enregistrer un fichier temporaire)?

Merci

Répondre

0

C'est le genre de chose que le plugin h2o2 peut être utilisé.

Inscrivez-vous comme vous le feriez pour tout autre plug-in:

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); 
    }); 
}); 

Puis l'itinéraire suivant à vous lancer dans la transmission d'un flux à votre autre serveur:

{ 
    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' 
     } 
    } 
} 

Pour le mandatement de travailler, parse doit être défini sur false sur le serveur proxy, mais peut être défini sur true sur le serveur qui traite réellement votre fichier.

Pour que cet exemple fonctionne, les chemins sur les deux serveurs doivent être les mêmes.