2016-11-11 9 views
0

Facebookのプロフィール写真をNode.JSを使用してダウンロードしようとしていますが、Facebookがリダイレクトを行うため問題があります。Node.JSリダイレクト後にファイルをサーバにダウンロード

URL:https://graph.facebook.com/userId/picture?type=large

マイダウンロード機能:

var fs = require('fs'); 
var https = require('follow-redirects').https; 

var download = function(uri, filename) { 
    var deferred = Q.defer(); 

    var data = ""; 
    https.get(uri, function(response) { 
     response.on('data', function(chunk) { 
      console.log(chunk); 
      data += chunk; 
     }); 

     response.on('end', function() { 
      fs.writeFile(filename, data, 'binary', function(err) { 
       if(err) { 
        console.log(err.message); 
       } else { 
        deferred.resolve(); 
       } 
      }) 
     }); 

    }).on('error', function(err) { 
     fs.unlink(filename); 
     deferred.reject(err); 
    }); 

    return deferred.promise; 
}; 

結果のファイルが破損しているので、私は、1つのチャンクを取得します。

どうすればこの問題を解決できますか?

答えて

1

これを試してみてください。私のために働いた

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

function download(uri, filename) { 
    var protocol = url.parse(uri).protocol.slice(0, -1); 
    var deferred = Q.defer(); 
    var onError = function (e) { 
     fs.unlink(filename); 
     deferred.reject(e); 
    } 
    require(protocol).get(uri, function(response) { 
     if (response.statusCode >= 200 && response.statusCode < 300) { 
      var fileStream = fs.createWriteStream(filename); 
      fileStream.on('error', onError); 
      fileStream.on('close', deferred.resolve); 
      response.pipe(fileStream); 
     } else if (response.headers.location) { 
      deferred.resolve(download(response.headers.location, filename)); 
     } else { 
      deferred.reject(new Error(response.statusCode + ' ' + response.statusMessage)); 
     } 
    }).on('error', onError); 
    return deferred.promise; 
}; 
+0

おかげで、! –

関連する問題