Télécharger des images avec node.js

Je suis en train d'écrire un script pour télécharger des images à l'aide de node.js. C'est ce que j'ai à ce jour:

var maxLength = 10 //10mb
var download = function(uri, callback) {
  http.request(uri)
    .on('response', function(res) {
      if (res.headers['content-length'] > maxLength*1024*1024) {
        callback(new Error('Image too large.'))
      } else if (!~[200, 304].indexOf(res.statusCode)) {
        callback(new Error('Received an invalid status code.'))
      } else if (!res.headers['content-type'].match(/image/)) {
        callback(new Error('Not an image.'))
      } else {
        var body = ''
        res.setEncoding('binary')
        res
          .on('error', function(err) {
            callback(err)
          })
          .on('data', function(chunk) {
            body += chunk
          })
          .on('end', function() {
            //What about Windows?!
            var path = '/tmp/' + Math.random().toString().split('.').pop()
            fs.writeFile(path, body, 'binary', function(err) {
              callback(err, path)
            })
          })
      }
    })
    .on('error', function(err) {
      callback(err)
    })
    .end();
}

Toutefois, je veux pour le rendre plus robuste:

  1. Sont là des bibliothèques de faire ceci et faire cela mieux?
  2. Est-il une chance que les en-têtes de réponse au mensonge (à propos de longueur, sur un type de contenu)?
  3. Il d'autres codes d'état, je devrait s'en inquiéter? Dois-je la peine avec les redirections?
  4. Je pense que j'ai lu quelque part que binary encodage va être obsolète. Que dois-je faire ensuite?
  5. Comment puis-je obtenir que cela fonctionne sur windows?
  6. Toutes les autres façons dont vous pouvez faire ce script mieux?

Pourquoi: pour une fonctionnalité similaire à imgur où les utilisateurs peuvent me donner une URL, j'ai télécharger cette image et lui donner l'image en plusieurs tailles.

InformationsquelleAutor Jonathan Ong | 2012-10-05