Publier le fichier d’un serveur à un autre en utilisant node.js, needle, busboy / multer

Je souhaite déplacer une petite image d’un serveur à un autre (les deux nœuds en cours d’exécution). En cherchant, je n’en ai pas trouvé assez. Ce message rest sans réponse.

Comme j’ai commencé à expérimenter, j’ai écrit ce qui suit sur le premier serveur:

app.post("/move_img", function(req, res) { console.log("post handled"); fs.readFile(__dirname + "/img_to_move.jpg", function(err, data) { if (err) throw err; console.log(data); needle.post(server2 + "/post_img", { data: data, name : "test.jpg" }, function(result) { console.log(result); res.send("ok"); }); }); }); 

Cette partie semble fonctionner car je pourrais écrire les données sur le même serveur (en utilisant fs.writeFile), recréer l’img.

Maintenant, alors que j’essaie de gérer la publication sur l’autre serveur, j’ai un problème.

Server2:

 app.post('/post_img', [ multer({ dest: './uploads/images'}), function(req, res) { console.log("body ",req.body) // form fields console.log("files ",req.files) // form files res.send("got it"); }]); 

De cette façon, je reçois un object vide dans les fichiers et le suivant dans le corps: { 'headers[Content-Type]': 'application/x-www-form-urlencoded', 'headers[Content-Length]': '45009' }

Je pense que je pourrais utiliser busboy comme alternative mais je ne peux pas le faire fonctionner. Tout conseil, tutoriel serait le bienvenu.

Je lirais simplement votre fichier du premier serveur avec la fonction readFile () , puis l’ écrirais sur l’autre serveur avec la fonction writeFile () .

Ici, vous pouvez voir l’utilisation des deux fonctions sur l’un de mes serveurs.

J’ai résolu mon problème en utilisant le code suivant,

serveur1 (avec une aiguille):

 app.post("/move_img", function(req, res) { console.log("post handled") var data = { image:{ file: __dirname + "/img_to_move.jpg", content_type: "image/jpeg"} } needle.post(server2 + "/post_img", data, { multipart: true }, function(err,result) { console.log("result", result.body); }); }) 

Serveur 2:

 app.use('/post_img',multer({ dest: '.uploads/images', rename: function(fieldname, filename) { return filename; }, onFileUploadStart: function(file) { console.log(file.originalname + ' is starting ...') }, onFileUploadComplete: function(file) { console.log(file.fieldname + ' uploaded to ' + file.path) } })); app.post('/post_img', function(req, res) { console.log(req.files); res.send("File uploaded."); }); 

Une alternative pour le serveur 1 est la suivante (en utilisant le module form-data):

 var form = new FormData(); form.append('name', 'imgTest.jpg'); form.append('my_file', fs.createReadStream(__dirname + "/img_to_move.jpg")); form.submit(frontend + "/post_img", function(err, result) { // res – response object (http.IncomingMessage) // console.log(result); });