2016-06-10 1 views
0

Je suis en train de sauver l'image de flux de stockage de blob bleu azur, en utilisant nœud multipartisme, mais l'événement « proche » n'est pas appelé ?:événement proche n'est pas appelé

var form = new multiparty.Form(); 
var fields = []; 
var parts = []; 

form.on('error', function(err) { 
    console.log('Error parsing form: ' + err.stack); 
}); 

form.on('field', function(name, value){ 
    fields.push({name:name, value: value}); 
}); 

form.on('part', function(part){ 
    parts.push({name:part.name, value:part}); 
}); 

form.on('close', function(){ 
     // How do I get the name called image from parts array, and save it to the azure storage? 
     var filename = part.filename; 
     var size = part.byteCount; 

     var onError = function(error) { 
      if (error) { 
       res.send({ grrr: error }); 
      } 
     }; 
     blobService.createBlockBlobFromStream('container', filename, part, size, onError); 
}); 
+0

'part' est un flux lisible accessible à l'intérieur de l'événement' part'. Vous devriez mettre la logique pour le téléchargement sur azure dans l'événement 'part'. Exemple https://github.com/andrewrk/node-multiparty/blob/master/examples/azureblobstorage.js~~V~~singular~~3rd – Sami

+0

Je veux vérifier quelques informations sur les champs, avant de le télécharger. – Alvin

+0

quel type d'information? – Sami

Répondre

0

On peut se référer à la réponse Why multipart is not generating close events pour avoir une idée de la raison pour laquelle vous ne pouvez pas émettre l'événement close.

puisque vous n'êtes pas canalisant les données dans un fichier, proche est émis uniquement lorsque toutes les données ont été canalisé sur l'objet req, provoquant req émette en interne, il est l'événement d'arrivée, ce qui déclenche le multipartisme événement close.

donc à côté de mettre tous les champs sur des fichiers sous la forme, vous pouvez essayer de tirer parti de l'événement file pour héberger les fichiers dans le dossier tmp et les traiter en cas close plus tard. 'G ':

var blobService = azure.createBlobService(); 
var form = new multiparty.Form({autoFiles:true}); 
var fields = []; 
var files = []; 
form.on('field', function(name, value){ 
    fields.push({name:name, value: value}); 
}); 
form.on('file',function(name,file){ 
    files.push(file); 
}); 
form.on('close',function(){ 
    console.log(files); 
    var file = files[0]; 
    var onError = function(error) { 
     if (error) { 
      res.send({ grrr: error }); 
     } 
    }; 

    blobService.createBlockBlobFromStream(container, file.originalFilename, fs.createReadStream(file.path),file.size,file.headers, function(error) { 
    if (error) { 
     // error handling 
     console.log(error); 
    }else{ 
     res.end('File uploaded successfully'); 
    } 
    }); 
}); 
form.parse(req);