使用node.js下载图像

我正在尝试编写脚本以使用node.js下载图像。这是我到目前为止的内容:


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();

}

但是,我想使它更强大:


有图书馆这样做并且做得更好吗?

响应头是否有可能说谎(关于长度,关于内容类型)?

我还应该关注其他状态代码吗?我应该麻烦重定向吗?

我想我在某处读到了binary编码将被弃用。那我该怎么办?

我怎样才能在Windows上使用它?

还有其他方法可以使此脚本更好吗?

原因:对于类似于imgur的功能(用户可以给我一个URL),我下载了该图像,然后以多种尺寸重新托管该图像。


慕姐8265434
浏览 601回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP