2011-09-27 6 views
3

express 및 nodejs를 사용하고 있으며 내 서버에 Facebook 프로필 사진을 저장하는 데 문제가 있습니다. 사진NodeJS : facebook 프로필 사진을 저장하는 방법

위치 : 스크립트를 사용하고 http://profile.ak.fbcdn.net/hprofile-ak-ash2/275619_223605264_963427746_n.jpg

는 :

var http = require('http') 
    var fs = require('fs') 

    var options = { 
     host: 'http://profile.ak.fbcdn.net', 
     port: 80, 
     path: '/hprofile-ak-ash2/275619_223605264_963427746_n.jpg' 
    } 

    var request = http.get(options, function(res){ 
     res.setEncoding('binary') 

     var imagedata = '' 
     res.on('data', function (chunk) {imagedata += chunk}) 

     res.on('end', function(){ 
     fs.writeFile('logo.jpg', imagedata, 'binary', function (err) { 
      if(err){throw err} 
      console.log('It\'s saved!'); 
     }) 
     }) 
    }) 

이미지가 저장되지만 비어 있습니다. 이미지 데이터를 기록하는 콘솔도 비어 있습니다. I followed this example origionally 나를 위해 작동합니다. 그냥 이미지의 위치를 ​​페이스 북 그림으로 변경하면 스크립트가 중단됩니다.

+0

예제 이미지에서 일어나는 일 : p – Mustafa

답변

8

나는 일 함수 함께 올라오고 결국 :

var http = require('http'); 
var fs = require('fs'); 
var url  = require('url'); 

var getImg = function(o, cb){ 
    var port = o.port || 80, 
     url  = url.parse(o.url); 

    var options = { 
     host: url.hostname, 
     port: port, 
     path: url.pathname 
    }; 

    http.get(options, function(res) { 
     console.log("Got response: " + res.statusCode); 
     res.setEncoding('binary') 
     var imagedata = '' 
     res.on('data', function(chunk){ 
      imagedata+= chunk; 
     }); 
     res.on('end', function(){ 
      fs.writeFile(o.dest, imagedata, 'binary', cb); 
     }); 
    }).on('error', function(e) { 
     console.log("Got error: " + e.message); 
    }); 
} 

사용법 :

getImg({ 
     url: "http://UrlToImage.com", 
     dest: __dirname + '/your/path/to/save/imageName.jpg' 
    },function(err){ 
     console.log('image saved!') 
    }) 
+1

Facebook의 API에는 http://graph.facebook.com/:uid/picture가 있어야 다른 URL로 리디렉션됩니다. 코드가 첫 번째 URL에서 그림을 다운로드하려고하면 302가 나오고 이미지는 다시 저장되지 않습니다. 이 코드를 업데이트 할 수 있습니까? :-) – Sven

2

내 대답은 조금 늦게 알아,하지만 난 다른 사람을 도울 바랍니다 우리는이 질문을하게됩니다. 그래서 여기 있습니다 :

노드 서버의 루트 디렉토리에 파일을 저장하는 방법은 다음과 같습니다 :

var request = require("request"); 
var fs = require("fs"); 
var fbUserId = 4; 
var imageLink = "https://graph.facebook.com/"+ fbUserId +"/picture?width=500&height=500"; 

request(imageLink).pipe(fs.createWriteStream("resultIMG.png")) 
    .on('close', function(){ 
     console.log("saving process is done!"); 
    }); 

물론 파일 이름 문자열보다 먼저 이미지에 대해 원하는 경로를 추가 할 수 있습니다. 당신은 여전히 ​​빈 이미지가 표시되는 경우

는 다음과 같이 null에 요청 모듈의 인코딩을 설정 :

var request = require("request").defaults({ encoding: null }); 

을해야한다고.

+0

어떤 경로 이미지가 우리 애플리케이션에 저장 될 것인가? 세부적인 프로세스를 제공 할 수 있습니까? –

+0

답장 상태와 같은 질문을 이해했다면 저장된 이미지 이름 앞의'createWriteStream' 함수에 매개 변수로 저장할 이미지를 원하는 경로를 추가 할 수 있습니다. 예를 들어'request (imageLink) .pipe (fs.createWriteStream ("/ path/to/resultIMG.png"))'. –

+0

나는 이미이 아이디어를 얻었고 또한 잘 적용했다. –

관련 문제