gpt4 book ai didi

node.js - NodeJS/Meteor 如何通过 request.get 和 future 从外部服务器下载许多文件?

转载 作者:太空宇宙 更新时间:2023-11-04 02:37:53 25 4
gpt4 key购买 nike

我目前在尝试通过外部 request.get 下载许多图像时遇到问题,代码如下

var future = new Future();
var images, nome, blob;

.each(imoveis, function(dadosImovel, numeroImovel){

images = dadosImovel.images;

_.each(imagens, function(value, key){

// the name of the image to a permalink format, this function is working
nome = Meteor.createPermalinkFromString(value[3]);

// the link pointing to the image
blob = Meteor.getImage(value[0]);

Meteor.saveImage(blob, nome, '.jpeg');
});
});

// Get a image through a url
Meteor.getImage = function(url){

var options = {
url : url,
encoding : null
};

// get raw image
request.get(options, function(error, result, body) {

if (error) {
return console.error(error);
}

// pause until binaries are fully loaded
future['return'](body);

});

return future.wait()
};

// save a image in a server folder
Meteor.saveImage = function(name, blob, ext, encoding) {

var projectPath = basepath.resolve('.').split('.meteor')[0],
chroot = Meteor.chroot || projectPath + 'public', // (process.env['PWD'] +'/public') ;
path = chroot + (path ? '/' + path + '/' : '/'),
name = Meteor.cleanName(name || 'file'),
encoding= encoding || 'binary';


// TODO Add file existance checks, etc...
fs.writeFile(path + name + ext, blob, encoding, function(err) {
if (err) {
console.log(err);
throw (new Meteor.Error(500, 'Failed to save file.', err));
} else {
console.log('The file ' + name + ' (' + encoding + ') was saved to ' + path);
}
});

return true;
}

现在发生了什么:在循环的第一次迭代中,我很好地收到了图像,但在下一个迭代中出现了问题。

如果我有,那么所有 10 个图像都以 10 个不同的名称保存(它们还有 10 个指向正确图像链接的链接),但是当您可视化该图像时,它是列表中的第一个图像,保存了所有其他 9 个图像,就像一旦加载第一个图像 meteor ,就不要等待下一个二进制/图像代码到达才保存。

关于如何解决这个问题有什么想法吗?

最佳答案

改变

var Future = new Future();

从外部作用域到函数内部,getImage 修复了图像问题,但创建了另一个问题。

我当前的代码是

        _.each(imoveis, function(dadosImovel, numeroImovel){

var imagens = dadosImovel.imagens;

_.each(imagens, function(value, key){

var nome = Meteor.createPermalinkFromString(value[3]);

var blob = Meteor.getImage(value[0]);

Meteor.saveImage(blob, nome, '.jpeg');

});
});

现在我有一个无限的外循环,一次又一次地仅保存循环第一项中的图像集。

关于node.js - NodeJS/Meteor 如何通过 request.get 和 future 从外部服务器下载许多文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20397856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com