2017-10-06 1 views
1

J'utilise la directive ng-file-upload pour envoyer une image au serveur à partir de mon application angulaire. Voici mon code:Télécharger un fichier d'image en bloc problème

Upload.upload({ 
    url: 'http://localhost:5000/upload', 
    data: { file: blobFile }, 
    resumeChunkSize: 10000, 
}).then(function (resp) { //upload function returns a promise 
    console.log('resp: ', resp); 
}); 

L'image est transférée en morceaux. Mais maintenant, je suis frappé ici. Je ne sais pas comment recevoir ces morceaux et fusionner pour créer une image complète. Mon code de serveur est comme suit:

handler: function (req, res) { 
    var size = 0; 

    req.on('data', function (data) { 
     size += data.length; 
     console.log('Got chunk: ' + data.length + ' total: ' + size); 
    }); 

    req.on('end', function() { 
     console.log("total size = " + size); 
     res.send("response"); 
    }); 

    req.on('error', function (e) { 
     console.log("ERROR ERROR: " + e.message); 
    }); 
    } 

Chaque fois, je reçois une demande de morceau, req.on('end', ...) déclencheurs. Je suis un débutant si confus ici.

Répondre

0

Oui .. une image chunked est pas si simple à télécharger ...

Voici une solution i utiliser:

var request = require('request'); 
var fs = require('fs'); 

function uploadChunkedImage(url, callback){ 

    // request options 
    var options = { 
     url: url, // the url of the image 
     method: 'GET' 
    }; 

    // array of chunks 
    var chunks = []; 

    // request 
    request(options, function (err, res, body) { 
     console.log('END') 

     // body is corrupted, you can't use it for images... :-(
     // so, we will callback the concactened buffer of it instead 

     // concact chunk buffers 
     chunks = Buffer.concat(chunks); // image buffer that you can use 

     // callback the result 
     callback(err, res, chunks); 

    }).on('response', function (response) { 

     response.on('data', function (chunk) { 
      // collect chunk buffer 
      chunks.push(chunk); 
     }); 

    }); 
} 

uploadChunkedImage('http://localhost:5000/upload', function(err, res, buffer){ 
    if(!err){ 
     // save 
     fs.writeFile('./myDirPath/image.jpg', buffer); 
    }else{ 
     console.log(err); 
    } 

}); 

Ne pas oublier d'installer request et fs dans votre projet NPM, Buffer est originaire

npm install request --save 
npm install fs --save 

pour plus d'informations:

Vous pourriez faire la même astuce avec ng-file-upload, il y a une good example right here, sinon je vous suggère d'essayer quelque chose comme ci-dessous (non testé):

handler: function (req, res) { 

    // array of chunks 
    var chunks= []; 

    req.on('data', function (data) { 

     // collect 
     chunks.push(data); 
     console.log('Got chunk: ' + data.length); 

    }); 

    req.on('end', function() { 

     // concact 
     chunks = Buffer.concat(chunks); 
     console.log("Total size = " + chunks.length); 

     // res.send() is deprecated, use res.write instead 
     res.write(chunks,'binary'); 
     res.end(null, 'binary'); 

    }); 

    req.on('error', function (e) { 
     console.log("ERROR ERROR: " + e.message); 
    }); 
} 

Espérons que cela aidera