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

使用Fastify-multipart通过多部分表单向Shopify上传文件遇问题

解决Fastify v3 + fastify-multipart v5转传文件到Shopify的FormData错误问题

问题原因

Fastify-multipart v5的saveRequestFiles返回的文件对象仅包含磁盘存储路径filepath,而非旧方案中的Buffer/File类型;parts则返回文件可读流,直接将这些对象追加到FormData会触发「未使用Blob」的错误。


方案一:读取本地文件转Blob/Buffer后追加

通过fs模块读取磁盘上的文件内容,转换为Buffer或Blob后再添加到FormData:

const fs = require('fs').promises;
const FormData = require('form-data');

// 接收客户端上传的文件并保存到磁盘
const uploadedFiles = await fastify.saveRequestFiles();
const formData = new FormData();

for (const file of uploadedFiles) {
  // 读取文件内容为Buffer
  const fileBuffer = await fs.readFile(file.filepath);
  // 转换为Blob(Node.js 16.14+支持原生Blob,低版本可使用blob-polyfill)
  const fileBlob = new Blob([fileBuffer], { type: file.mimetype });
  // 追加到FormData,指定文件名和类型
  formData.append('file', fileBlob, file.filename);
}

// 发起转传请求到Shopify
const shopifyResponse = await fetch('https://your-shop.myshopify.com/admin/api/2024-07/products/{product_id}/media.json', {
  method: 'POST',
  headers: {
    ...formData.getHeaders(),
    'X-Shopify-Access-Token': 'your-access-token'
  },
  body: formData
});

方案二:直接使用可读流转传(无磁盘写入,更高效)

跳过磁盘存储步骤,直接通过parts获取文件可读流,添加到FormData(需使用支持可读流的form-data库):

const FormData = require('form-data');

const formData = new FormData();
// 获取请求中的文件流
const parts = await fastify.parts();

for await (const part of parts) {
  // 过滤出文件类型的请求部分
  if (part.file) {
    // 直接将可读流追加到FormData
    formData.append('file', part.file, {
      filename: part.filename,
      contentType: part.mimetype
    });
  }
}

// 发起转传请求到Shopify
const shopifyResponse = await fetch('https://your-shop.myshopify.com/admin/api/2024-07/products/{product_id}/media.json', {
  method: 'POST',
  headers: {
    ...formData.getHeaders(),
    'X-Shopify-Access-Token': 'your-access-token'
  },
  body: formData
});

注意事项

  • 确保使用form-data库(Node.js环境)而非浏览器原生FormData,前者支持Buffer和可读流的追加操作。
  • 验证Shopify接口的参数要求,比如字段名是否为file、API版本是否正确。
  • 若Node.js版本低于16.14,需安装blob-polyfill来支持Blob构造函数。

内容的提问来源于stack exchange,提问作者محمد خير الخلق

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:42:38