AWS SDK中Body.transformToString无法读取S3文件内容问题
解决AWS S3 GetObjectCommand返回Body调用transformToString()为空的问题
你遇到的情况是调用GetObjectCommand拿到非空的Body对象,但transformToString()返回空内容,以下是几个排查和解决方向:
确认S3文件本身非空
先登录AWS控制台,检查对应fileKey指向的S3文件实际是否有内容。有时候控制台打印的Body对象只是流的实例,不代表文件本身有数据。改用流读取的方式转换内容
AWS SDK v3的Body是ReadableStream,部分场景下transformToString()可能因为流处理逻辑问题读取失败,换用手动读取流的方式试试:const { Body } = response; const chunks = []; for await (const chunk of Body) { chunks.push(chunk); } const bodyContents = Buffer.concat(chunks).toString(); console.log(bodyContents);指定正确的编码格式
如果文件是非UTF-8编码(比如二进制文件、GBK编码文本),直接调用transformToString()会导致解析异常,指定对应编码:// 文本文件指定对应编码,比如GBK const bodyContents = await Body.transformToString('gbk'); // 二进制文件可以转成base64 const bodyContents = await Body.transformToString('base64');检查SDK版本并升级
旧版本的@aws-sdk/client-s3可能存在transformToString()的bug,执行以下命令升级到最新版本:npm update @aws-sdk/client-s3调试流的读取状态
通过监听流的事件,确认流是否有数据输出:Body.on('data', (chunk) => console.log('读取到数据块:', chunk.toString())); Body.on('end', () => console.log('流读取结束')); Body.on('error', (err) => console.error('流读取错误:', err));
内容的提问来源于stack exchange,提问作者Mohsin Yaqoob
相关产品推荐
相关产品推荐

