当前位置: 首页 > 知识库问答 >
问题:

从Node.js中的google drive下载公共图像

彭建业
2023-03-14

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

这里有一个例子

[
  {
    "name": "A",
    "photoUrl": "https://drive.google.com/uc?export=view&id=1km3V6PP70MTUsNWFEgdVea6jv-0BMnRT"
  },
  {
    "name": "B",
    "photoUrl": "https://drive.google.com/uc?export=view&id=1km3V6PP70MTUsNWFEgdVea6jv-0BMnRT"
  },
]

共有1个答案

钱和平
2023-03-14

我相信你的现状和你的目标如下。

>

  • 所有文件中一个文件的最大文件大小为3 MB。

    当文件公开共享时,您希望使用node.js将其作为二进制数据下载。

      null
      [
        {
          "name": "A",
          "photoUrl": "https://drive.google.com/uc?export=view&id=1km3V6PP70MTUsNWFEgdVea6jv-0BMnRT"
        },
        {
          "name": "B",
          "photoUrl": "https://drive.google.com/uc?export=view&id=1km3V6PP70MTUsNWFEgdVea6jv-0BMnRT"
        },
      ]
    
    const fs = require("fs");
    const request = require("request");
    
    async function main() {
      const download = ({ name, url }) =>
        new Promise((resolve, reject) => {
          request({ url: url, encoding: null }, (err, res, buf) => {
            if (err) {
              reject(err);
              return;
            }
            if (res.headers["content-type"].includes("text/html")) {
              console.log(`This file (${url}) is not publicly shared.`);
              resolve(null);
              return;
            }
    
            // When you use the following script, you can save the downloaded image data as the file.
            fs.writeFile(
              name,
              buf,
              {
                flag: "a",
              },
              (err) => {
                if (err) reject(err);
              }
            );
    
            resolve(buf);
          });
        });
    
      // This is a sample list from your question.
      const list = [
        {
          name: "A",
          photoUrl:
            "https://drive.google.com/uc?export=view&id=1km3V6PP70MTUsNWFEgdVea6jv-0BMnRT",
        },
        {
          name: "B",
          photoUrl:
            "https://drive.google.com/uc?export=view&id=1km3V6PP70MTUsNWFEgdVea6jv-0BMnRT",
        },
      ];
    
      // 1. Create filename and convert the URL for downloading.
      const reqs = list.map(({ name, photoUrl }) => ({
        name: `${name}.jpg`,
        url: `https://drive.google.com/uc?export=download&id=${
          photoUrl.split("=")[2]
        }`,
      }));
      
      // 2. Download the files.
      const buffers = await Promise.all(reqs.map((obj) => download(obj)));
      console.log(buffers);
    }
    
    main();
    
    • 您的URL被转换为WebContentLink。这样,当文件大小小于3 MB时,可以使用WebContentLink.
    • 下载该文件
    • 在此示例脚本中,当文件公开共享时,将下载并保存该文件。而且,您还可以使用下载的数据作为缓冲区。在这种情况下,当文件没有公开共享时,返回null
    • 在您的情况下,文件列表中的所有文件都是JPEG图像。使用此方法,通过检查响应头的内容类型,当text/html不包括时,可以认为该文件没有公开共享。
    • 当您想下载一个大文件时,我想建议使用API密钥下载它。这样,您的脚本可以简单地修改。当您不能使用API密钥时,您可以使用这个线程的进程下载它。

  •  类似资料:
    • > 假设我有一个导出链接,如下所示:

    • 问题内容: 我正在尝试编写一个脚本来使用node.js下载图像。这是我到目前为止的内容: 但是,我想使它更强大: 有图书馆这样做并且做得更好吗? 响应头是否有可能说谎(关于长度,关于内容类型)? 我还应该关注其他状态代码吗?我应该麻烦重定向吗? 我想我读过某个地方会不赞成使用编码。那我该怎么办? 我怎样才能在Windows上使用它? 还有其他方法可以使此脚本更好吗? 原因:对于类似于imgur的功

    • 问题内容: 我在Google云端硬盘上存储了一个zip文件(已公开共享)。我想知道如何在Golang中下载它。当前代码仅创建一个名为“ file.zip”的空白文件: 问题答案: 我找到了解决方案。使用:https://googledrive.com/host/ ID 而不是:https : //docs.google.com/uc?export=download& id = ID

    • 我需要一个代码(更喜欢在pyhton3),知道如何认证和下载URL直接从谷歌文档。

    • 我对谷歌驱动器有问题。 链接前: 工作很好,直到现在:-(但现在它不再工作了。结果没有找到错误404,但文件存在。我可以上传文件和轻松构建下载URL。 例如,公共文档。 我如何才能下载未经授权的文件,我需要直接链接。 谢谢!!!

    • 代码: 我的文件已成功上载到我的firebase存储,但是: null