2010-11-13 120 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; 
    } 
} 
相关问题