2017-01-23 96 views
0

我正在創建一個節點服務器,可以將文件上傳到節點服務器,然後發送到也在使用節點的存儲服務器。 要做到這一點,我使用的表單數據模塊頁上介紹這種方法:通過請求模塊傳輸節點JS文件

var formData = { 
    my_field: 'my_value', 
    my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), 
}; 

request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) { 
    if (err) { 
    return console.error('upload failed:', err); 
    } 
    console.log('Upload successful! Server responded with:', body); 
}); 

我的問題是,當我嘗試寫的存儲服務器上的文件,它將創建一個具有內容的文本文件[對象目的]。

這裏是我的代碼:

main.js

var form = new formData(); 
form = { 
     'oldFileName': oldName, 
     'newFileName': newName, 
     'file': fs.createReadStream(FILEPATH), 
    }; 

    request.post({url:'http://127.0.0.1:9001/upload', form: form}, function(err, httpResponse, body) { 
     if (err) { 
      return console.error('upload failed:', err); 
     } 
    }); 

storage.js

app.post('/upload', function(req,res){ 
    //Filenames are displayed without problem 
    console.log(req.body.newFileName); 
    console.log(req.body.oldFileName); 

    fs.writeFile('./testing/' + req.body.newFileName, req.body.file, function(err) { 
    if(err) { 
     return console.log(err); 
    } 
}) 

我敢肯定,我失去了一些東西真的很明顯,但我似乎無法讓它工作。

+0

我認爲你必須使用'multer'或類似的庫來接受'storage.js'中的'multipart/form-data'' –

+0

我試過了(抱歉應該提到它),但是'multer'沒有出現在表格中識別文件 –

回答

0

您在form選項request改變的內容application/x-www-form-urlencoded而不是multipart/form-data通過formData

app.js

var form = { 
    'oldFileName': oldName, 
    'newFileName': newName, 
    'file': fs.createReadStream(FILEPATH), 
}; 

request.post({url:'http://127.0.0.1:9001/upload', formData: form}, function(err, httpResponse, body) { 
    if (err) { 
     return console.error('upload failed:', err); 
    } 
}); 

此外,解析multipart/form-data,你必須使用multer或類似的庫,body-parser在這種情況下無法正常工作。請找到以下工作storage.js保存文件的代碼。

storage.js

var multer = require('multer') 
    var upload = multer({ 
    storage: multer.diskStorage({ 
     destination: function (req, file, cb) { 
      cb(null, './testing/'); 
     }, 
     filename: function (req, file, cb) { 
      cb(null, req.body.newFileName); 
     } 
    }) 
    }).single('file'); 

app.post('/upload', function(req, res, next){ 
    upload(req, res, function (err) { 
     if(err){ 
      return res.send(err); 
     } else{ 
      return res.send("Upload successfully"); 
     } 
    }); 
}); 

希望它可以幫助你。

+0

解決了它,謝謝! –