1

小さなイメージをあるサーバーから別のサーバー (両方とも実行中のノード) に移動したいと考えています。探しても、なかなか見つからない。この投稿は未回答のままです。

実験を始めたとき、最初のサーバーに次のように書きました。

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

この部分は、同じサーバーに (fs.writeFile を使用して) データを書き込んで img を再作成できるため、機能しているようです。

他のサーバーで投稿を処理しようとしているときに、問題が発生しました。

サーバー2:

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

このようにして、ファイルに空のオブジェクトを取得し、本文に以下を取得します。 { 'headers[Content-Type]': 'application/x-www-form-urlencoded', 'headers[Content-Length]': '45009' }

バスボーイを代替手段として使用できると思いますが、機能しません。アドバイス、チュートリアルは大歓迎です。

4

3 に答える 3

1

次のコードを使用して問題を解決しました。

server1 (針を使用) :

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

サーバー 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.");

});

サーバー1の代替手段は次のとおりです(フォームデータモジュールを使用):

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);
});
于 2015-05-21T13:51:14.117 に答える
0

関数 readFile() を使用して最初のサーバーからファイルを読み取り、関数writeFile()使用して他のサーバーに書き込むだけです。

ここでは、私のサーバーの 1 つで両方の機能を使用できます。

于 2015-05-20T12:45:59.593 に答える