2016-11-23 3 views
0

Ich habe Array von URL-Bildern. Ich muss diese Bilder von der Remote-URL zu meinem Server asynchron herunterladen.Was Download Bilder von Remote-URL

Beispiel:

// i need this function return array localfiles after download 

function someFunctionAsDownloadedRemoteIMages(arrayOfRemoteUrls){ 
    localImages = []; 
    arrayOfRemoteUrls.forEach(function(url){ 
     request.head(url, function(err, res, body){ 
      newImageName = randomInt(100000, 999999); 
      var filename = 'catalog/import/'+newImageName+'.jpg'; 

      request(url, {encoding: 'binary'}, function(error, response, body) { 
       fs.writeFile('image/'+filename, body, 'binary', function (err) { 
       if(err) 
        return; 
       localImages.push(filename); 
       }); 
      }); 
     }); 
    }); 
} 

var remoteImagesArray = ["http://example.com/1.jpg", "http://example.com/1444.jpg","http://example.com/ddsgggg.jpg"]; 

localImagesArray = someFunctionAsDownloadedRemoteIMages(remoteImagesArray); 

someFunctionProccess(localImagesArray); 
+0

Also, was ist das Problem? –

Antwort

2

Wenn Sie es wollen etwas asynchron zurückkehren Sie einen Rückruf Muster anstelle der Rücksendung einen Wert aus einer Funktion verwenden. Nachdem Sie alle Bilder geladen haben, müssen Sie auch einen Weg finden, wie der Callback des Endergebnisses ausgelöst wird. Ich würde vorschlagen, ein Modul wie async zu verwenden und die map Funktion zu verwenden, die es bereitstellt. Die map Funktion ermöglicht es Ihnen, ein Array zu verarbeiten, und es gibt eine Reihe von Ergebnissen zurück. Unten ist ein Beispiel:

var async = require('async'); 
var fs = require('fs'); 
var request = require('request'); 

function processUrl(url, callback){ 
    request.head(url, function(err, res, body){ 
      var newImageName = randomInt(100000, 999999); 
      var filename = 'catalog/import/'+newImageName+'.jpg'; 

      request(url, {encoding: 'binary'}, function(error, response, body) { 
       fs.writeFile('image/'+filename, body, 'binary', function (err) { 
       if(err) return callback(err); 
       callback(null,filename); 
       }); 
      }); 
     }); 
} 

function someFunctionAsDownloadedRemoteIMages(arrayOfRemoteUrls, callback){ 
    async.map(arrayOfRemoteUrls, processUrl, callback); 
} 



var remoteImagesArray = ["http://example.com/1.jpg", "http://example.com/1444.jpg","http://example.com/ddsgggg.jpg"]; 

someFunctionAsDownloadedRemoteIMages(remoteImagesArray, function(err, localImagesArray){ 
    if(err) //handle it 
    someFunctionProccess(localImagesArray); 
});