12

Google क्लाउड फ़ंक्शन के माध्यम से Google क्लाउड स्टोरेज में बड़ी फ़ाइल (> 50MB) अपलोड करने का प्रयास करते समय, मैं इन अपवादों में चलाता हूं विकल्पों में से निर्भर करता है मैं सेट: setttingफ़ाइल क्लास के माध्यम से जीसीपी पर स्ट्रीमिंग करते समय ESOCKETTIMEOUT, ECONNRESET या सॉकेट बड़ी फ़ाइल के साथ लटक रहा है()

  • जबकि अनुरोध विकल्प 'हमेशा के लिए: झूठी' मैं मिल: त्रुटि: सॉकेट
  • लटका settting जबकि अनुरोध विकल्प 'पुन: प्रारंभ योग्य: सच' मैं मिल: त्रुटि: ECONNRESET
  • बारे में
  • अनुरोध विकल्प को व्यवस्थित करते समय 'पुन: शुरू करने योग्य: झूठा' मुझे मिलता है: त्रुटि: पुन: प्रयोज्य के साथ ESOCKETTIMEDOUT: झूठी

यहाँ कोड मैं का उपयोग किया जाता है:

function uploadFile(bucketName, filename, data) { 
    console.log("Starting uploading blob..."); 
    const Storage = require('@google-cloud/storage'); 

    console.log("Creating client..."); 
    const storage = new Storage(); 
    storage.interceptors.push({ 
     request: function(reqOpts) { 
     reqOpts.forever = false; 
     return reqOpts 
     } 
    }); 

    console.log("Getting bucket " + bucketName + "..."); 
    const bucket = storage.bucket(bucketName); 
    console.log("Creating file " + filename + "..."); 
    const file = bucket.file(filename); 
    console.log("Creating write stream..."); 

    var writeStream = file.createWriteStream({ 
    metadata: { 
     contentType: 'plain/text' 
    }, 
    resumable: false 
    }); 

    writeStream.on('error', function(e) { console.error("An error occurred : " + e); }); 
    writeStream.on('finish', function() { console.log("Success"); }); 

    console.log("Initializing Streaming..."); 
    var bufferStream = new stream.PassThrough(); 
    bufferStream.end(data); 
    bufferStream.pipe(writeStream); 
} 

वहाँ कुछ मैं याद कर रहा हूँ है?

+0

आप कौन सा संस्करण चला रहे हैं? मैं '1.2.1' पर हूं और वही त्रुटियां प्राप्त कर रहा हूं। – surjikal

+0

मैं @ google-cloud/storage 1.4.0 का उपयोग कर रहा था। मैंने "अनुरोध-वादे" के बजाय lib "अनुरोध" का उपयोग करके इस समस्या को ठीक किया है और यह अच्छी तरह से काम करता है! –

उत्तर

6

मैंने "अनुरोध-वादे" के बजाय lib "request" (2.83.0) का उपयोग करके अपनी समस्या तय की। यहां उपयोग किया गया सरलीकृत कोड है:

const request = require('request').defaults({ 
    timeout: 500000, 
    gzip: true, 
    forever: false, 
    pool: { 
     maxSockets: Infinity 
    } 
}); 
const Storage = require('@google-cloud/storage'); 
const storage = new Storage(); 
storage.interceptors.push({ 
    request: function(reqOpts) { 
     reqOpts.forever = false; 
     return reqOpts 
    } 
}); 

/** 
* HTTP Cloud Function. 
* 
* @param {Object} req Cloud Function request context. 
* @param {Object} res Cloud Function response context. 
*/ 
exports.exportToGCS = function exportToGCS(req, res) { 
    var bucket = req.body.bucket; 
    var fileName = req.body.fileName; 

    try { 
     console.log("Getting bucket " + bucket + "..."); 
     var bucket = storage.bucket(bucket); 
     console.log("Creating file " + fileName + "..."); 
     const file = bucket.file(fileName); 
     console.log("Creating writeStream..."); 
     var writeStream = createWriteStream(file); 
     // Get the stream from a request to send out to GCS 
     var options = createRequest(); 
     request 
      .get(options) 
      .pipe(writeStream); 
     console.log("Streaming to Storage..."); 
     res.send("The export has been successfully initialized"); 
    } catch (e) { 
     console.error(e.message, e.name); 
     res.status(500).send("An error occurred during the export initialization"); 
    } 
}; 

// Initialize the PDF write stream 
function createWriteStream(file) { 
    var writeStream = file.createWriteStream({ 
     metadata: { 
      //metadata you want to set 
     } 
    }); 
    writeStream .on('error', function(e) { console.error("An error occurred : " + e); }); 
    writeStream .on('finish', function() { console.log("Export completed"); }); 
    return writeStream ; 
} 

आशा है कि इससे मदद मिलती है!

संबंधित मुद्दे