मेरा काम एक बड़े जेसन डेटा (1 मिलियन यूआरएल से युक्त) को पार्स करना और स्थानीय सर्वर पर छवियों को डाउनलोड करना है, लेकिन डाउनलोड करते समय हम बड़ी संख्या में डेटा (लगभग 50k) खो रहे हैं जो लॉग फाइलों में कैप्चर नहीं होते हैं

हम बड़ी जोंस फाइल को कई छोटी जोंस फाइलों में बांट रहे हैं। हमने नोडजेएस में एक प्रोग्राम लिखा है जो जेएसओएन से यूआरएल (छवियों से युक्त) पढ़ता है और उन छवियों को स्थानीय सर्वर पर डाउनलोड करता है, लेकिन इस प्रक्रिया में हम बड़ी मात्रा में डेटा खो रहे हैं जो लॉग फाइलों में नहीं लिखा गया है या डाउनलोड नहीं किया गया है।

तो इस कोड में क्या संशोधन करने की आवश्यकता है?

मेरा JSON

    [{
        "url": "http://example1.com", 
        "id": "jweewewii833388efje.jpg", 
        "class": 2
    }, 
    {
        "url": "http://example2.com", 
        "id": "987c2732561cb6bbc151cb6e184d019b.jpg", 
        "class": 24
    }, 
    {
        "url": "http://example3.com", 
        "id": "141cbe32ed1f0071431677a2c7754a70.jpg", 
        "class": 22
    }, 
    {
        "url": "http://example4.com", 
        "id": "291a09e237b43d9fa1bf64481a679eaf.png", 
        "class": 1
    }]

नोड जेएस कोड

var fs = require('fs'),
JSONStream = require('JSONStream'),
es = require('event-stream');
const download = require('image-downloader')
var util = require('util');
var log_file = fs.createWriteStream('logfiles/log13.log', {flags : 'w'});

var getStream = function () {
    var jsonData = 'train.json',
    stream = fs.createReadStream(jsonData, {encoding: 'utf8'}),
    parser = JSONStream.parse('*');
    return stream.pipe(parser);
};

getStream()
  .pipe(es.mapSync(function (data) {
        //console.log(data.url);
        const options = {
         url: data.url,
         dest: './uploads/'+data.id             // Save to /path/to/dest/image.jpg
        }
        download.image(options)
         .then(({ filename, image }) => {
        console.log('Saved to', filename)  // Saved to /path/to/dest/image.jpg
         })
         .catch((err) => {
            //errorlog.error(`Error Message : $(data.id)${err}`);
            const logdata = function(d) { //
              log_file.write(util.format(d) + '\n');
              //log_stdout.write(util.format(d) + '\n');
            };
            console.error =logdata
             console.error(" Error URL:: "+data.url+" ID::"+data.id+"::"+err)
         })


}));

मैं बिना कोई खोए कुल डेटा डाउनलोड करना चाहता हूं। अगर कोई त्रुटि यूआरएल है जो लॉग फ़ाइल में लिखा जाएगा उदाहरण: अगर मैं जेसन फ़ाइल से 10k डेटा संसाधित कर रहा हूं तो मैं चाहता हूं कि लगभग 8k छवियां डाउनलोड की जाएंगी और अन्य 2k लॉग फ़ाइल में लिखी जाएंगी

0
developerExecutive 4 सितंबर 2019, 09:44

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि आप विफल संचालन लॉगिंग के लिए जिम्मेदार फ़ंक्शन को कॉल करने से चूक गए हैं। मैंने आपका कोड संशोधित किया और "नोट्स" जोड़े। मुझे उम्मीद है यह मदद करेगा।

const fs = require('fs');
const JSONStream = require('JSONStream');
const es = require('event-stream');
const download = require('image-downloader')
const util = require('util');
const log_file = fs.createWriteStream('logfiles/log13.log', { flags: 'w' });

const getStream = function () {
    const jsonData = 'train.json',
        stream = fs.createReadStream(jsonData, { encoding: 'utf8' }),
        parser = JSONStream.parse('*');
    return stream.pipe(parser);
};

getStream()
    .pipe(es.mapSync(function (data) {
        //console.log(data.url);
        const options = {
            url: data.url,
            dest: `./uploads/${data.id}`             // Save to /path/to/dest/image.jpg
        }
        download.image(options)
            .then(({ filename, image }) => {
                console.log('Saved to', filename)  // Saved to /path/to/dest/image.jpg
            }).catch((err) => {

                //errorlog.error(`Error Message : $(data.id)${err}`);

                /* 
                     NOTE: I am assuming the function below logs the affected data
                      in some file that you can access at a later time(?)
                 */

                const logdata = function (d) { //
                    log_file.write(util.format(d) + '\n');
                    //log_stdout.write(util.format(d) + '\n');
                };

                // NOTE: Call the function and pass the data to log it for later review
                logdata(data);

                // NOTE: I commented the below line out
                // console.error =logdata

                // Output to console as you have done before
                console.error(" Error URL:: " + data.url + " ID::" + data.id + "::" + err)
            });
    }));
0
Grey 5 सितंबर 2019, 10:21