Post file from one server to another,using node.js , needle , busboy/multer

巧了我就是萌 提交于 2019-12-20 04:24:41

问题


I would like to move a small image from one server to another (both running node). As I search, I haven't found enough. This post remains unanswered.

As I started experimenting I wrote the following to the first server :

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

This part seems to be working as I could be writing the data in the same server (using fs.writeFile) recreate the img.

Now as I am trying to handle the post in the other server I have a problem.

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

This way i get an empty object in the files and the following in the body: { 'headers[Content-Type]': 'application/x-www-form-urlencoded', 'headers[Content-Length]': '45009' }

I think I could use busboy as an alternative but I can't make it to work. Any advice, tutorial would be welcome.


回答1:


I'd simply read your file from the first server with the function readFile() and then write it to the other server with the function writeFile().

Here you can see use of both functions in one of my servers.




回答2:


I solved my problem by using the following code,

server1 (using needle) :

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

Server 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.");

});

An alternative for the server 1 is the following (using form-data module):

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


来源:https://stackoverflow.com/questions/30349885/post-file-from-one-server-to-another-using-node-js-needle-busboy-multer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!