我怎样才能 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()
运行良好。请注意,无论如何,这些问题肯定会导致您阅读文件的方式出现问题。
我是 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()
运行良好。请注意,无论如何,这些问题肯定会导致您阅读文件的方式出现问题。