@Sergio_Kioto12345

Почему возникает проблема скачки картинок через цикл node js?

Есть ассоциативный массив в котором, много url(тысячи), по которым должны скачиваться картинки. Проблема состоит в том, что одну картинку по url, я скачать могу, но когда пробую циклом скрипт, не работает.

Скрипт создаёт кучу файлов весом 0кб(то есть картинка не загружена пустой файл), потом глохнет полностью.
Мои предположения что файлов очень много, плюс двойной цыкл, возможно из за этого он просто неуспевает загружать файлы ?

Если дело в этом , то как сделать чтоб следуйщая картинка грузилась после того как загрузилась предыдущая ?

Вот пример самого массива:

var json = {

    "1223": {
        "PHOTO": ["http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg"]
    },

    "2323": {
        "PHOTO": ["http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg"],
    },
    "21323": {
        "PHOTO": ["http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg"],
    },
    "23423": {
        "PHOTO": ["http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg"],
    },
    "5432": {
        "PHOTO": ["http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg"],
    },
    "234234": {
        "PHOTO": ["http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg"],
    },
    "34234": {
        "PHOTO": ["http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg"],
    },
    "23421": {
        "PHOTO": ["http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg"],
    }

Вот пример как я пытаюсь скачать:

for (property in json) {
  //--- console.log(json.PHOTO)
  json[property].PHOTO.forEach(function(item, i, arr) {
    //--console.log(item);
    var file = fs.createWriteStream(i);
    var request = http.get(item, function(response) {
      response.pipe(file);
    });
  })
}


Если кто сталкивался с проблемой, подскажыте как можно решыть ?
  • Вопрос задан
  • 175 просмотров
Пригласить эксперта
Ответы на вопрос 1
lazalu68
@lazalu68
Salmon
Я только чуть-чуть подправил именование файлов, вроде всё работает.

Код
var fs = require('fs');
var http = require('http');
var child_process = require('child_process');
var json = {
  "1223": {
    "PHOTO": ["http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg"]
  },
  "2323": {
    "PHOTO": ["http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg", "http://nagadali.ru/wp-content/uploads/2015/12/zhenshhina-rozhdennaya-v-god-krolika-kota-ochen-lyubopytna-500x375.jpg"]
  }
};

for (property in json) {
  json[property].PHOTO.forEach(function(item, i, arr) {
    var path_arr = item.split('/');
    var index_of_extension_dot = path_arr[path_arr.length - 1].lastIndexOf('.');
    var extension = (index_of_extension_dot === -1)  ? false : path_arr[path_arr.length - 1].substr(index_of_extension_dot + 1, path_arr[path_arr.length - 1].length - 1);
    var path, file, request;
    
    if (extension) {
      path = property + '-' + i + '.' + extension;
      file = fs.createWriteStream(path);
      request = http.get(item, function(response) {
        response.pipe(file);
      });
    } else {
      console.log('error: an extension should be specified to prevent raw HTML loading', property, i, item);
    }
  })
}

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы