节点 fs 从给定 URL 或 GCS 读取文件

node fs read file from given URL or GCS

当 运行 下面的代码给出错误,从目录中读取文件工作完美但当通过 url 时它给出文件未找到错误。我已经检查 fs.statSync 接受 url。

const stat = fs.statSync('http://techslides.com/demos/sample-videos/small.mp4');


Error: ENOENT: no such file or directory, stat 'http://techslides.com/demos/sample-videos/small.mp4'

那是因为它托管在 web-server 上,您需要发送 HTTP GET 才能在本地获取它。

安装 axios 包并发出 HTTP GET 请求以从 web-server 获取远程资源。

npm install --save axios

下面是程序的大致思路

const fs = require('fs');
const axios = require('axios');
const { promisify } = require('util');

const writeFilePromise = promisify(fs.writeFile);

(async () => {
  const url = 'http://techslides.com/demos/sample-videos/small.mp4';
  const response = await axios.get(url);
  if (response.data) {
    await writeFilePromise('small.mp4', response.data);
  }
})();

fs.statSync() 可以使用 URL,但前提是 URL 是 file:// URL.

不清楚如果参数实际上是一个 http:// URL 你会想做什么。您可以检查它是否不是文件 URL,然后尝试使用 got().[=15= 等库获取 URL 的内容以查看它是否存在]

但是,使用 http 从另一台服务器获取数据将不是同步的,因此您必须将函数的设计更改为 return 承诺而不是同步 API。