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

将GET请求返回的Stream上传至S3后文件为空的问题求助

问题分析与解决

核心问题出在两个地方:

  1. fetch调用里多了无效的fileName参数,导致请求格式错误
  2. 使用response.text()将响应流转为字符串,这会破坏二进制文件(比如你上传的PDF)的原始数据,最终导致S3上的文件为空或损坏

修复后的代码

fetch('https://www.example.com', {
  method: 'GET',
  headers: {
    'Authorization': "Bearer " + myAccessToken,
  },
})
.then(function(response) {
  // 直接返回原生可读流,无需转换为文本
  return response.body;
})
.then(function(stream) {
  uploadToS3(stream);
});

const uploadToS3 = (stream) => {
  const params = {
    Bucket: myBucket,
    Key: "fileName.pdf",
    Body: stream
  };

  s3.upload(params, function(err, data) {
    if (err) {
      throw err;
    }
    console.log(`File uploaded successfully. ${data.Location}`);
  });
};

关键说明

  • response.body是浏览器原生的ReadableStream,可以直接作为S3上传的Body参数,完美适配流上传场景
  • 如果你使用AWS SDK v3,只需调整upload方法的调用形式,核心逻辑依然是传入可读流
  • 确认myBucket和myAccessToken已正确赋值,且S3桶的IAM权限允许执行上传操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:20:31