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

Node.js中如何将图片Blob转换为本地图片文件?

解决方案:将Hugging Face API返回的Blob保存为本地图片

你代码里的核心问题是**request库返回的响应对象没有blob()方法**——这个方法是浏览器环境中Response对象的专属API,Node.js里的request返回的是Buffer或字符串,直接调用response.blob()必然报错,这就是你之前尝试失败的根本原因。

下面给你两种可行的实现方式:

方式一:使用node-fetch(推荐,适配Blob/Buffer)

node-fetch是浏览器Fetch API的Node.js实现,能直接处理Blob或获取Buffer,更贴合你的需求。

步骤1:安装依赖

npm install node-fetch fs

步骤2:修改代码并添加保存逻辑

const fetch = require('node-fetch');
const fs = require('fs').promises;

async function query(data) {
  const url = "https://api-inference.huggingface.co/models/prompthero/openjourney";

  try {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Authorization': 'AUTHTOKEN-HERE!!!',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(data),
    });

    // 直接获取Buffer(Node.js中保存文件更高效)
    const buffer = await response.buffer();
    // 自定义保存路径和文件名
    await fs.writeFile('./generated-image.png', buffer);
    console.log('图片已成功保存到本地');
    return buffer;
  } catch (err) {
    console.log("发生错误");
    console.log(err);
  }
}

// 调用示例
query({ "inputs": "你的生成提示词" });

方式二:兼容原request库(直接处理Buffer)

如果不想更换依赖库,也可以通过配置request返回Buffer,再直接保存:

const request = require('request');
const fs = require('fs');

function query(data) {
  const url = "https://api-inference.huggingface.co/models/prompthero/openjourney";

  return new Promise((resolve, reject) => {
    request({
      method: 'POST',
      uri: url,
      headers: {
        'Authorization': 'AUTHTOKEN-HERE!!!',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(data),
      encoding: null // 关键配置:让响应返回Buffer而非字符串
    }, (err, response, body) => {
      if (err) {
        console.log("发生错误");
        reject(err);
        return;
      }
      // 将Buffer写入本地文件
      fs.writeFile('./generated-image.png', body, (writeErr) => {
        if (writeErr) {
          console.log("保存文件失败");
          reject(writeErr);
          return;
        }
        console.log('图片已成功保存到本地');
        resolve(body);
      });
    });
  });
}

// 调用示例
query({ "inputs": "你的生成提示词" });

补充:之前转base64失败的原因

如果一定要通过base64中转,需要先把Buffer转为base64字符串,再重新转回Buffer保存(注意不要带data:image/png;base64,这类前缀):

// Buffer转base64再转回Buffer的示例
const base64Str = body.toString('base64');
const bufferFromBase64 = Buffer.from(base64Str, 'base64');
fs.writeFile('./image.png', bufferFromBase64, (err) => {
  // 处理保存逻辑
});

但这种方式多了一次转换,不如直接用Buffer高效,不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:53:02