2015-12-07 59 views
0

我想先下載一個鏡像文件到服務器,然後將這個文件上傳到其他服務器。如何使用請求模塊進行下載,然後上傳文件不需要中間文件

如果沒有download file step,這將是非常簡單的

var fs = require('fs'); 
var path = '/tmp/test.png'; 
var formData = { 
    method: POST, 
    url: 'http://127.0.0.1:3000', 
    json: true, 
    formData :{file: fs.createReadStream(path)} 
}; 
    request(formData, function(err, res, body){ 
    console.log("successful"); 
}); 

然而,對於download image file的情況;

我不想先保存文件,通過像request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))這樣的格式。然後重複fs.createReadStream

有沒有什麼方法可以得到文件流,所以我可以直接使用文件流構成formData;

+0

不是已經處理文件流上傳的請求 - https://github.com/request/request#streaming; fs.createReadStream('file.json').pipe(request.put('http://example.com/obj.json')) –

+0

@JeromeWAGNER,是的,這是處理文件上傳的步驟。我認爲'file.json'應該是一個語言環境文件。對於我的情況,我不想在服務器上保存下載文件,所以不會有文件名。期待您的其他建議。 – ryu

+0

@ryu所以遵循提供的推理,你嘗試'request(formData).pipe(request.put(...))'? – robertklep

回答

1

request文檔,可以使用

request.get(sourceUrl).pipe(request.post(targetUrl)) 

在該方案中,數據將從sourceUrl流向targetUrl這個,但不會需要保存在服務器上的臨時文件中。

cf https://github.com/request/request#streaming瞭解更多詳情。

1

這個工作對我來說:

var fs  = require('fs'); 
var request = require('request'); 
var formData = { 
    method : 'POST', 
    url  : 'http://127.0.0.1:3000', 
    json  : true, 
    formData : { file : request(downloadUrl) } 
}; 

request(formData, function(err, res, body){ 
    if (err) throw err; 
    console.log("successful"); 
}); 
+0

這對我也適用!有人應該在他們的文檔中添加這個方法。謝謝! – wilsontgh

相關問題