我怎样才能 Read/Write 图片 Node.js?

How can I Read/Write Images with Node.js?

我是 JS 的新手,我正在开发一个使用 Discord.js 的 Discord 机器人,它使用 COCO-SSD JS 并要求我从我的 PC 来回 Read/Write 文件。

我知道这可能不是最好的主意,但当我到达它时我会穿过那座桥。

现在,我需要一种方法来从我的 PC 读取和写入图像。

注意: 文件需要从 URL 写入我的计算机。但是,如果有任何方法可以避免在我的电脑上下载图像,我也将不胜感激。

我正在使用“fs”、“https”和“fetch”。

我的方法的问题是我从图像中接收到的像素是 NULL,所以我不能用它们做很多事情。

这是我当前的代码:

抱歉格式太糟糕了,英语不是我的母语而且现在是凌晨 2 点。

const fetchUrl = require("fetch").fetchUrl;
const https = require('https');

function saveImageToDisk(url,path)
{
    var fullUrl = url;
    var localPath = fs.createWriteStream(path);
    var request = https.get(fullUrl,function(response) { console.log(response)
         response.pipe(localPath)
        });
    
}

saveImageToDisk("https://post.greatist.com/wp-content/uploads/sites/3/2020/02/322868_1100-1100x628.jpg","./images/" + Date.now + ".png");

const img = fs.readFile("./images/" + Date.now + ".png", function(response){console.log(response)});

我知道如何使用模块 node-fetch 实现类似的功能,因此我将在下面提供一个示例。我不知道你的 discord 机器人到底需要这个功能做什么,但下面的代码将能够正确地将图像 url 保存到指定路径。

const fetch = require("node-fetch");
const fs = require("fs");

function saveImageToDisk(url, path)
{
    fetch(url)
    .then(res => res.buffer())
    .then(buffer => fs.writeFileSync(path, buffer));
    
}

我已经测试了上面的示例代码,它运行良好。至于其余的代码,我确实有一些修复:

const filepath = "./images/" + Date.now() + ".png";
const imageurl = "https://post.greatist.com/wp-content/uploads/sites/3/2020/02/322868_1100-1100x628.jpg";

saveImageToDisk(imageurl, filepath);
const img = fs.readFile(filepath, (err, response) =>{
    if (err) throw err;

    console.log(response);
});

具体来说,主要问题是:

  • Date.now 是一个函数(因此它应该是 Date.now()
  • 您应该只创建一次文件路径字符串而不是两次(为了准确和简单)
  • fs.readFile 的回调实际上将其错误对象作为第一个参数(因此您实际上是将错误或错误记录到控制台而不是 response/file 本身)。

完全有可能仅这些问题就导致您的代码无法运行,而您的原始 saveImageToDisk() 运行良好。请注意,无论如何,这些问题肯定会导致您阅读文件的方式出现问题。