当前位置: 首页 > 面试题库 >

使用node.js下载图像

方德宇
2023-03-14
问题内容

我正在尝试编写一个脚本来使用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();
}

但是,我想使它更强大:

  1. 有图书馆这样做并且做得更好吗?
  2. 响应头是否有可能说谎(关于长度,关于内容类型)?
  3. 我还应该关注其他状态代码吗?我应该麻烦重定向吗?
  4. 我想我读过某个地方binary会不赞成使用编码。那我该怎么办?
  5. 我怎样才能在Windows上使用它?
  6. 还有其他方法可以使此脚本更好吗?

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


问题答案:

我建议使用request模块。下载文件与以下代码一样简单:

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

var download = function(uri, filename, callback){
  request.head(uri, function(err, res, body){
    console.log('content-type:', res.headers['content-type']);
    console.log('content-length:', res.headers['content-length']);

    request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
  });
};

download('https://www.google.com/images/srpr/logo3w.png', 'google.png', function(){
  console.log('done');
});


 类似资料:
  • 问题内容: 我正在尝试使用我的应用程序中的URL和按钮下载图像。当我在手机上运行它时,我无法下载该图像。任何人都可以指出这个问题。我在这里先向您的帮助表示感谢 :) 这是我的代码。 问题答案: 您可以通过两种方式从url下载图像 1。您 可以使用Glide库从url加载图像,看下面的代码,它可以轻松地为您提供帮助 编译这个库 而不是像这样加载图像 2。如果您不想使用第三方库,请尝试此 创建一个异步

  • 问题内容: 现在我有一个,我想将其另存为PNG。我可以使用所有那些花哨的复杂文件系统API来做到这一点,但我真的不喜欢它们。 我知道上面是否有带有属性的链接: 如果用户单击该文件,它将下载文件。因此我想到了这个: 但是,它似乎不起作用。它是否必须由用户操作触发?否则为什么它不起作用? 问题答案: 问题在于jQuery不会触发元素的本机事件,因此不会发生导航(的正常行为),因此您需要手动执行操作。对

  • 我在googledrive上有一个图片集,我有一个链接列表,指向每一个图片。它们可能是公共的,也可能不是公共的(任何有链接的人)。我想将它们保存在本地,并将它们单独嵌入到网页中,因为将它们直接嵌入到img标签中会导致图像加载的延迟。 这里有一个例子

  • 我试图下载和保存图像从网络使用python的模块。 以下是我使用的(工作)代码: 以下是使用

  • 问题内容: 我已经知道映像在哪里,但是为了简单起见,我想使用JSoup本身下载映像。(这是为了简化获取cookie,引荐来源网址等)。 这是我到目前为止所拥有的: 问题答案: 在通过JSoup和一些实验找到答案之前,我什至没有写完问题。

  • 问题内容: 我正在尝试使用的模块从网络下载并保存图像。 这是我使用的(工作)代码: 你能帮助我从响应中使用什么属性吗? 问题答案: 你可以使用对象,也可以遍历响应。 默认情况下,使用类似文件的对象不会解码压缩的响应(使用GZIP或deflate)。你可以通过将属性设置为True(requests将其设置False为控制自身解码)来强制为你解压缩。然后,你可以使用将数据流式传输到文件对象: 要遍历响