You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Fetch API获取图片并通过fs模块保存?Axios可行吗?

用Fetch/Axios实现图片+文本文件下载方案

你原来的函数只用res.text()处理内容,只能搞定文本文件。图片属于二进制数据,得换个方式处理——不管用Fetch还是Axios都能实现,下面是具体方案:

Fetch API改造方案

核心是针对图片改用res.blob()获取二进制数据,再转成Node.js的Buffer类型供文件写入:

async function fetchGithubFileContent(url) {
  // 从URL提取文件名,判断是否为图片
  const fileName = url.split('/').pop();
  const isImage = /\.(png|jpg|jpeg)$/i.test(fileName);

  const res = await fetch(url);
  let content;

  if (isImage) {
    // 获取图片二进制Blob,转成Buffer
    const blob = await res.blob();
    content = Buffer.from(await blob.arrayBuffer());
  } else {
    // 文本文件照旧用text()获取
    content = await res.text();
  }

  window.electronAPI.writeFile({ content, fileName });
}

async function writeFile({ content, fileName }) {
  fs.writeFile(path.join(__dirname, fileName), content, (err) => {
    if (err) throw err;
    console.log(`successfully saved ${fileName}`);
  });
}

// 测试图片下载
fetchGithubFileContent("https://example.com/your-test-image.png");
// 原文本文件下载不受影响
fetchGithubFileContent("https://raw.githubusercontent.com/Tetrax-10/Nord-Spotify/master/src/nord.js");

关键改动

  • 增加图片判断逻辑,通过扩展名识别png/jpg文件
  • 图片请求用blob()获取二进制数据,再转成Buffer(因为Electron主进程的fs.writeFile支持直接写入Buffer)
  • 文本文件保持原有逻辑,不影响之前的功能

Axios实现方案

Axios同样可行,只需要设置对应的responseType,代码更简洁:

const axios = require('axios');

async function fetchGithubFileContent(url) {
  const fileName = url.split('/').pop();
  const isImage = /\.(png|jpg|jpeg)$/i.test(fileName);

  const response = await axios.get(url, {
    // 图片用arraybuffer,文本用text
    responseType: isImage ? 'arraybuffer' : 'text'
  });

  let content = response.data;
  if (isImage) {
    content = Buffer.from(content);
  }

  window.electronAPI.writeFile({ content, fileName });
}

async function writeFile({ content, fileName }) {
  fs.writeFile(path.join(__dirname, fileName), content, (err) => {
    if (err) throw err;
    console.log(`successfully saved ${fileName}`);
  });
}

// 调用示例
fetchGithubFileContent("https://example.com/your-test-image.jpg");

额外优化建议

  • 比扩展名判断更可靠的方式:用响应头的Content-Type,比如res.headers.get('Content-Type').startsWith('image/'),避免扩展名不对的情况
  • 确保Electron主进程中正确引入fs和path模块,渲染进程通过IPC调用写入逻辑(你现有代码的window.electronAPI.writeFile已经是正确的IPC方式)

内容的提问来源于stack exchange,提问作者Raghavan Vidhyasagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:35:26