将GET请求返回的Stream上传至S3后文件为空的问题求助
问题分析与解决
核心问题出在两个地方:
fetch调用里多了无效的fileName参数,导致请求格式错误- 使用
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
相关产品推荐
相关产品推荐

