从远程URL下载什么图像
问题描述:
我有一系列url图像。我需要从远程URL下载异步这个图像到我的服务器。从远程URL下载什么图像
例:
// 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);
答
如果你想让它异步返回任何东西,你必须使用的,而不是从函数返回值的回调格局。有了这个说法,您还需要一种方法,一旦所有图像加载完毕,就会触发最终结果回调。我会建议使用像async一样的模块,并使用它提供的map
函数。函数map
将允许您处理数组,并返回一组结果。下面是一个例子:
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);
});
那么是什么问题? –