2017-09-19 1 views
1

Je travaille sur le serveur de nœud de téléchargement, pour un fichier après le téléchargement, je reçois une erreurbinary.js BinaryStream.write Stream est pas accessible en écriture sur le serveur de noeud

I am using node version v0.10.48

Reference code picked from https://github.com/rajkissu/binaryjs-upload-stream

Error: Stream is not writable
at BinaryStream.write (/node_modules/binaryjs/lib/stream.js:84:11)
at /src/K/Cli/upload/lib/media.js:120:36
at ChildProcess.exithandler (child_process.js:742:7)
at ChildProcess.emit (events.js:110:17)
at maybeClose (child_process.js:1015:16)
at Process.ChildProcess._handle.onexit (child_process.js:1087:5)

Je ne parviens pas à trouver le chemin comment résoudre ce. Le problème est pour 1% cas ci-dessous le code va à console.log('Debug 4) cas et lors de l'exécution stream.write({end: true}); il arrête le serveur de noeud c.-à-d., Je reçois mauvaise passerelle, puisque l'erreur lancée n'est pas gérée. Sur le frontal j'utilise les données du serveur de noeud lire l'ID de contenu et le définir, mais puisque le serveur de noeud s'arrête et que je ne peux pas obtenir l'ID de contenu du serveur de noeud.

bs = new BinaryServer({ port: 9004 }); 

bs.on('connection', function (client) { 
    client.on('stream', function (stream, meta) { 
     upload(stream, meta); 
    }); 
}); 

function upload(stream, meta) { 
    var file = fs.createWriteStream(uploadPath + '/' + meta.name); 
    stream.pipe(file); 
    stream.on('end', function() { 

     // console.log(__dirname); 
     var cli_base=__dirname+'/../../'; 

     var cmd = '<upload systme cmd>'; 
     console.log('Uploading End and running command ' + cmd);   
     try { 
      stream.write({uploaded: true}); 
     }catch (e) { 
      console.log('Debug 3, Streem On End Event : '+e.message,meta); 
      // stream.write({end: true}); 
     } 
     if(!meta.hasOwnProperty('executed')){ 
      meta.executed=true; 
      child = exec(cmd, function (error, stdout, stderr) { 
       try{ 
        console.log(error, JSON.parse(stdout), stderr); 
        var command_output = JSON.parse(stdout); 

        if(command_output.hasOwnProperty('content_id')){ 
         stream.write({end: true, content_id: command_output.content_id,files:command_output.file}); 
         console.log(command_output.content_id); 
        } 
       }catch (e) {       
        console.log('Debug 4, Streem On End Event : '+e.message,meta,child); 
        stream.write({end: true}); 
       } 
      }); 
     } 

    }); 
} 
+1

ce problème pourrait être dû à l'utilisation de la version de noeud !! Veuillez vérifier la version de votre noeud et ajouter votre question. –

+0

@MuneerAlam J'utilise la version de noeud «v0.10.48» pour cela, et une question mise à jour pour le même. –

+1

Le problème @Ramrantan Gupta peut être résolu si vous pouvez mettre à jour la version de votre noeud (> 0.12.X) ou une version LTS. –

Répondre

1

J'ai trouvé solution à votre problème, les options d'utilisation tout en créant l'objet de fichier comme ci-dessous

var options = {flags: 'w', encoding: 'utf8',fd: null,mode: '0666'}; 
var file = fs.createWriteStream(uploadPath + '/' + meta.name,options); 

Node reference https://nodejs.org/docs/v0.12.5/api/fs.html#fs_fs_createwritestream_path_options

Encoding options for createWriteStream https://nodejs.org/docs/v0.12.5/api/fs.html#fs_fs_writefile_filename_data_options_callback