2010-11-13 160 views
3

現在我在PHP中使用此腳本。我傳遞它的圖像和大小(大/中/小),如果它在我的服務器上,它會返回鏈接,否則它從遠程服務器複製它,然後返回本地鏈接。Node.js將遠程文件複製到服務器

function getImage ($img, $size) { 
    if (@filesize("./images/".$size."/".$img.".jpg")) { 
     return './images/'.$size.'/'.$img.'.jpg'; 
    } else { 
     copy('http://www.othersite.com/images/'.$size.'/'.$img.'.jpg', './images/'.$size.'/'.$img.'.jpg'); 
     return './images/'.$size.'/'.$img.'.jpg'; 
    } 
} 

它工作正常,但我想在Node.js做同樣的事情,我似乎無法弄清楚。文件系統似乎無法與任何遠程服務器交互,所以我想知道如果我只是搞亂了某些東西,或者如果它不能在本地完成並且需要模塊。

任何人都知道Node.js中的一種方式?

回答

4

你應該檢查出http.Clienthttp.ClientResponse。使用那些可以向遠程服務器發出請求並使用fs.WriteStream寫出對本地文件的響應。

事情是這樣的:

var http = require('http'); 
var fs = require('fs'); 
var google = http.createClient(80, 'www.google.com'); 
var request = google.request('GET', '/', 
    {'host': 'www.google.com'}); 
request.end(); 
out = fs.createWriteStream('out'); 
request.on('response', function (response) { 
    response.setEncoding('utf8'); 
    response.on('data', function (chunk) { 
    out.write(chunk); 
    }); 
}); 

我沒有測試過這一點,我不知道它會工作的開箱。但我希望它會引導你到你需要的東西。

+0

我測試了它,它實際上是「開箱即用」的。謝謝! – 2013-01-01 07:10:22

1

要給出一個更更新版本(如最近的答案是4歲,和http.createClient現在不建議使用),下面是一個使用request方法解決:

var fs = require('fs'); 
var request = require('request'); 
function getImage (img, size, filesize) { 
    var imgPath = size + '/' + img + '.jpg'; 
    if (filesize) { 
     return './images/' + imgPath; 
    } else { 
     request('http://www.othersite.com/images/' + imgPath).pipe(fs.createWriteStream('./images/' + imgPath)) 
     return './images/' + imgPath; 
    } 
} 
相關問題