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

使用NodeJS从Google Drive下载文件上传至S3时文件损坏问题

问题原因及解决方案

问题出在你用FormData包裹文件上传到S3预签名PUT URL——S3预签名PUT请求是用来直接上传原始文件内容的,不需要用FormData封装。用FormData后,上传的内容会包含表单的边界标识、字段描述等额外信息,这些内容会破坏PDF的原始结构,导致文件损坏。

修正后的代码

1. 保留Google Drive文件下载逻辑(无需修改)

const file = await this.driveClient.files.get(
  {
    fileId: id,
    alt: 'media',
  },
  {
    responseType: 'stream'
  },
);

2. 直接上传流到S3(去掉FormData)

const uploadedDocument = await axios({
  method: 'put',
  url: presignedS3Url,
  data: file.data, // 直接传入Google Drive返回的流
  headers: {
    'Content-Type': 'application/pdf' // 指定PDF的MIME类型,确保S3识别正确
  },
});

补充说明

如果之前尝试过blob响应类型,同样不需要用FormData,直接把blob对象作为data传入axios请求即可,同时设置对应的Content-Type。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:24:21